【问题标题】:C programming. Can i display value in file [closed]C 编程。我可以在文件中显示值吗[关闭]
【发布时间】:2015-02-19 20:53:27
【问题描述】:
    case '2' :
        {
            FILE *fp = fopen("C:/project/Value.txt","r");
            printf("\t\t\t\tDELETE\n");
            printf("\t-------------------------------------------------------\n");
            printf("\t\tVALUE IS ");
            int i=0;
            while(feof(fp))
            {
                fscanf(fp,"%d",&value[i]);
                printf("%d ",value[i]);
                i++;
            }
            fclose(fp);
            break;
        }           

我在案例 2 中有问题。我在文件中有值但没有显示值

【问题讨论】:

  • 永远不要在任何读取操作之前使用feof之前。阅读后立即使用。
  • @BasileStarynkevitch 你这么说很有趣。但是请参阅here,其中 feof 的使用方式与您警告的方式完全相同。你能证明这是为什么吗?

标签: c file-io data-structures


【解决方案1】:

我想Value.txt 里面有一些整数。您可以将循环更改为以下内容以使其工作:

while(fscanf(fp,"%d",&value[i])==1) //while fscanf is successful
    printf("%d ",value[i++]); //print and then increment i

阅读this 了解为什么while(!feof()) 是错误的(您在feof() 之前错过了!

【讨论】:

  • 这是不正确的,因为fscanf可以返回EOF,while循环会陷入无限循环。
【解决方案2】:

您使用了 while(feof(fp))。最初 fp 指向文件中的第一个字符,但不是 EOF 字符,因此 feof 返回 0 并且循环在没有被输入的情况下停止。所以要消除这种使用 while(!feof (fp)) 如果您确信存在与您正在使用的单个数据类型相关的值。例如,在您的代码中只有整数或字符等。

          while(!feof(fp))
        {
            fscanf(fp,"%d",&value[i]);
            printf("%d ",value[i]);
            i++;
        }

但是,如果您有多种数据类型并且只希望打印第一个整数,请使用

      while((!feof(fp))&&(fscanf(fp,"%d",&value[i])))
      {
         printf("%d ",value[i]);
         i++;

      }

在这种情况下,当达到 Eof 时 fscanf 返回 0。

【讨论】:

  • 这是不正确的,因为fscanf可以返回EOF,while循环会陷入无限循环。
  • 当然可以。它在文档和标准中这么说。你可以查一下。
  • 你现在我已经编辑了它,代码看起来很好
  • 比较还是不正确。如果设置了 EOF,则 feof() 返回非零值。并且 if 语句中两个调用的顺序应该颠倒,否则你会打印一个额外的虚假值。
  • 现在看看它是如何工作的
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2023-03-29
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多