你好!我正在尝试解决最长公共(public)子序列问题,但我遇到了一个与问题本身无关的问题。 我不认为我的程序没有显示正确的最终结果,因为它没有正确读取两个序列
我从一个文件中读取序列的主函数代码(第一行是第一个序列,第二行是第二个序列),我认为这里是错误所在。
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 | É | Û | © | È | ³ | | |
抱歉发了这么长的帖子。 预先感谢任何愿意提供帮助的人
最佳答案
第一个 while
循环消耗文件的所有内容,因为它一直运行到 fgetc()
返回 EOF
。第二个 while
循环根本没有运行,因为文件已经用完了。数组 X[]
和 Y[]
保持未初始化状态。
更不用说一旦你处理了 file == NULL
就没有必要检查它是否神奇地变成了 NULL
-- if (file)
语句是无用的。
关于c - 如何从文件中正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47624743/