c - 程序在 while 循环 fget() 之后停止

标签 c while-loop fgets

几天来我一直在尝试解决这个问题,但它仍然困扰着我。我有一个杂乱的工作程序,并决定对其进行一些清理,但在此过程中出现了问题。程序的一部分将 csv 数据(来自文件 rfile4)放入新文件(tmp41)中以供稍后使用:

    FILE *report4=fopen(rfile4,"r");
    FILE *tmp41=fopen(tmpfile41,"w+");

    if(!tmp41||!report4) 
    {
        fprintf(stderr, "FAILURE - 'REPORT' INPUT FILE NOT FOUND\n");
        exit(EXIT_FAILURE);
    }

    const char comma[2]=",";
    int nreports=0;

    while(fgets(line,SIZE,report4)!=NULL)
    {
        char linestore[SIZE];
        char mcodecheck[SIZE];

        strncpy(linestore,line,SIZE);
        char *tkndmp=linestore;

        int count1=0;

        while((tkndmp=strtok(tkndmp,comma))!=NULL)
        {       
            count1++;

            if(count1==4)
            {
                sscanf(tkndmp,"%s",mcodecheck);

                if(strcmp(mcode,mcodecheck)==0)
                {
                   nreports++;
                   fputs(line,tmp41);
                }
            }

            tkndmp=NULL;
        }

    }

    printf("SUCCESS");
    fclose(report4);
    rewind(tmp41);

“mcode”字符串是之前找到的,我已经确认这是正确的。所有文件位置也都是正确的。数据已正确输入到新文件中,但整个程序在循环后永远暂停,因此我从未看到打印“SUCCESS”。

有什么想法吗?我之前让它工作过,主要的变化是清理 strtok 业务,所以我怀疑我可能在这方面或在指针方面犯了错误。如果我从循环中删除所有代码,它就会正常退出。

最佳答案

将行打印到字符串需要新行。

关于c - 程序在 while 循环 fget() 之后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244800/

相关文章:

c - 将制表符转换为空格时出现段错误

c - 为什么 malloc 使用零大小?

c - 空白打印不正确

c - fgets() 从键盘读取新行字符

c - 写入和读取文件

c - 为什么这个程序会生成错误的答案?

java - 使用 printwirter attend 方法的 while 循环仅写入最后搜索的单词

c++ - 使用指针时无限循环

c - fgets 添加一个问号

c - ESP32如何重置与PCNT一起使用的GPIO引脚,以便它们也可以用于EXT1从深度 sleep 中唤醒?