c - 如何从文件中正确读取

标签 c

你好!我正在尝试解决最长公共(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/

相关文章:

c - 如何解释 C 中的缓冲区溢出漏洞

c - 用 C 将字符数组写入文件(给定方法不起作用)

c - 在哪里可以找到 libvlc 以将其包含在 Ubuntu 上?

c - sha512 : c program using the openSSL library

c++ - _IO_wide_data_2 : what's this?

c - 如何使用函数计算BMI?

c - C 中的链接结构

python - 如何使用 ctypes 将 C 函数中返回的二维数组传递给 python

c - 优雅地交换c中的链表节点

c - 堆栈是否持续增长?