你好!我正在尝试解决最长公共子序列问题,我正在崩溃一个与问题本身无关的问题。 我不认为我的程序没有显示正确的最终结果,因为它没有正确读取两个序列
我从一个文件中读取序列的主函数的代码(第一行是第一个序列,第二行是第二个序列),在这里我认为错误是。
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 | É| Û| ©| È| ³| | |
对不起,很长的帖子。 提前感谢愿意提供帮助的人
答案 0 :(得分:2)
第一个while
循环使用该文件的所有内容,因为它会一直运行直到fgetc()
返回EOF
。第二个while
循环根本不运行,因为文件已用完。数组X[]
和Y[]
仍然未初始化。
更不用说一旦你处理了案例file == NULL
,就没有必要检查它是否神奇地成为NULL
- if (file)
语句是没用的。