如何从文件中正确读取

时间:2017-12-04 00:10:32

标签: c

你好!我正在尝试解决最长公共子序列问题,我正在崩溃一个与问题本身无关的问题。 我不认为我的程序没有显示正确的最终结果,因为它没有正确读取两个序列

我从一个文件中读取序列的主函数的代码(第一行是第一个序列,第二行是第二个序列),在这里我认为错误是。

int main(){
    FILE *file;
    char c;
    int m=0, n=0, flag=0;
    file=fopen("test.txt","r");
    if(file==NULL){
        printf("Error opening file.\n");
        exit(0);
    }

    if(file){
        while((c=fgetc(file))!=EOF){
            if(c!=' ' && c!='\n' && flag==0)
                m++;
            if(c=='\n')
                flag=1;
            if(c!=' ' && c!='\n' && flag==1)
                n++;
        }
    }

    char X[m], Y[n];
    int i=0;

    if(file){
        while((c=fgetc(file))!=EOF){
            if(c!=' ' && c!='\n' && flag==0){
                i++;
                X[i]=c;
            }
            if(c=='\n'){
                flag=1;
                i=0;
            }               
            if(c!=' ' && c!='\n' && flag==1)
                i++;
                Y[i]=c;
        }
    }
    int j;
    for(i=0;i<m;i++){
            printf("%c | %c",X[i],Y[i]);

    }



    printf("Length of LCS is %d .\n", lcs( X, Y, m, n ) );

    return 0;
}

这是我打印第一个序列时返回的内容。 7 | É| Û| ©| È| ³| | |

对不起,很长的帖子。 提前感谢愿意提供帮助的人

1 个答案:

答案 0 :(得分:2)

第一个while循环使用该文件的所有内容,因为它会一直运行直到fgetc()返回EOF。第二个while循环根本不运行,因为文件已用完。数组X[]Y[]仍然未初始化。

更不用说一旦你处理了案例file == NULL,就没有必要检查它是否神奇地成为NULL - if (file)语句是没用的。