我在我的程序中遇到错误(应该找到所有的字符和字符和字符的文件),其中" 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;
}
编辑:
我忘了重新添加&#34; int result&#34;这是一个新的bug。可能与fgetc有关,就像有人提到的那样。我得到了额外的一个。
解决了:我正在阅读34作为&#34; 3&#34;和&#34; 4&#34;,所以它算作两个。不确定如何标记为已解决或是否删除此项。
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
答案 0 :(得分:0)
关于代码块:
while(!feof(rp))
{
if(isdigit(fgetc(rp)))
{
++result;
}
此代码块包含几个问题,包括格式化不易阅读。一些问题已在问题的评论中详细说明。建议:
int ch;
while(EOF != (ch = fgetc(rp)) )
{
if(isdigit(ch))
{
++result;
}
}
请注意,这会计算每个数字,并且您说您只对整数感兴趣,这可能是多位数,因此您需要稍微修改建议的代码。我会让你做那个修改。