0

我在我的程序中遇到了错误(应该找到所有整数和字符和整数的文件),其中“feof”不起作用(而循环永远不会结束)或没有整数被读取/找到,除非整个文件是充满整数。

我的代码...

 #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
4

1 回答 1

0

关于代码块:

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

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

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

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

于 2017-05-22T01:51:00.373 回答