在混合类型的文件中读取整数,"feof" 不起作用

Reading ints in a file of mixed types, "feof" not working

我的程序中出现错误(应该在字符和整数文件中找到所有整数),其中 "feof" 不起作用(循环永不结束)或没有整数 read/found 除非整个文件都是整数。

我的代码...

 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>

  int main(void)
  {
   FILE *ptr;
   int val;
   int i = 0;
   char myChar;
   int chc;
   int result = 0;

     ptr = fopen("stuff.txt", "w");

     if(ptr == NULL)
       {
        printf("Could not open file \n");
       }

    for(; i < 5; ++i)
       {
        printf(" Char(0) or int(1)? ");
        scanf("%d", &chc);

       if(chc == 0)
         {
          printf(" Enter a char: ");
          scanf(" %c", &myChar);

          fprintf(ptr, " %c \n", myChar);
         }
       else
         {
          printf(" Enter an int: ");
          scanf("%d", &val);

          fprintf(ptr, " %d \n", val);
         }
      }

     fclose(ptr);

 FILE *rp;

 rp = fopen("stuff.txt", "r");

 if(ptr == NULL)
   {
    printf("Could not open file \n");
   }
 else
   {

    while(!feof(rp))
         {
           if(isdigit(fgetc(rp)))
             {
              ++result;
             }
          }
   }

  printf(" Total numbers in file: %d\n", result);


 return 0;
}

编辑:

我忘了重新添加 "int result",这是一个新错误。可能像有人提到的那样与 fgetc 有关。我的总数中增加了一个。

已解决:我将 34 读作“3”和“4”,所以它算作两个。不确定如何标记为已解决或是否删除它。

 Char(0) or int(1)? 0

 Enter a char: e

 Char(0) or int(1)? 1

 Enter an int: 34

 Char(0) or int(1)? 0

 Enter a char: p

 Char(0) or int(1)? 0

 Enter a char: d

 Char(0) or int(1)? 0

 Enter a char: u

 Total numbers in file: 2

关于代码块:

while(!feof(rp))
     {
       if(isdigit(fgetc(rp)))
         {
          ++result;
         }

此代码块包含多个问题,包括格式不易阅读。一些问题已在对该问题的评论中进行了详细说明。建议:

int ch;
while(EOF != (ch = fgetc(rp)) )
{
    if(isdigit(ch))
    {
        ++result;
    }
}

请注意,这会计算每个数字,您说您只对整数感兴趣,整数可能是多位数字,因此您需要稍微修改建议的代码。我会让你做那个修改。