首页 > 解决方案 > 尝试替换文件中的单词时出现奇怪的故障

问题描述

这个问题分为 3 个部分:“想法”、“假设”和“代码 MRE ”,以便您可以帮助您清楚、快速、轻松地指出我的愚蠢之处,而且按照频率降序排列,大多数错误在于算法,在实现过程中所做的假设,然后在实际代码中。

理念:

假设:

代码 MRE

int main(){
    char frep[261]; getf scanf("%260[^\n]",frep);eat(); // stores fname in frep[], clears stdin
    FILE * rep = fopen(frep,"r");FILE * tmp = fopen("Temp.Ctt","w");// opens file for reading and tmp for writing
    if(rep==NULL||tmp==NULL){
        perror("\nError ");fclose(rep);fclose(tmp);
    }
    else{
        char target[501]; printf("\n Target : "); scanf("%500s",target);eat(); // gets target word
        char replace[501]; printf("\n Replacement : "); scanf("%500[^\n]",replace);eat();// gets its replacement
        char buffer[501]; long long i=0; int EOW[100000];
        while(1){
            char ch = fgetc(rep);
            if(ch==EOF)
                break; // breaks loop if EOF reached
            else if(ch==' '||ch=='\t'||ch=='\n'||ch == '\0')
                i++;EOW[i]=ch;
        }
        rewind(rep);
        for(int q=1; q<i; q++){
                fscanf(rep,"%500s",buffer);
                if(strcmp(target,buffer)==0)
                    strcpy(buffer,replace);
                fprintf(tmp,"%s%c",buffer,EOW[q]);
        }
        fclose(rep);fclose(tmp);
        remove(frep); rename("Temp.Ctt",frep);
        printf("\nSucess.\n\nReplaced any instances of \"%s\" with \"%s\".\n",target,replace);
    }
    
    return 0;
}

标签: cstringfile-ioscanftext-parsing

解决方案


    else if(ch==' '||ch=='\t'||ch=='\n'||ch == '\0')
        i++;EOW[i]=ch;

这是缺少大{ ... }括号,导致EOW[i]=ch;落在.else if

    for(int q=1; q<i; q++){

否则q <= i它会跳过最后一个元素,因为它EOW是如何编号的。

int EOW[100000];

不相关,但您可以这样做,char EOW因为它没有充分的理由成为int.


推荐阅读