提问人: 提问时间:5/21/2017 最后编辑:too honest for this site 更新时间:6/10/2018 访问量:159
读取混合类型文件中的整数,“feof”不起作用
Reading ints in a file of mixed types, "feof" not working
问:
我的程序中出现了错误(应该找到字符和整数文件中的所有整数和整数),其中“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”,所以它算作 2。不确定如何标记为已解决或是否将其删除。
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赞
user3629249
5/22/2017
#1
关于代码块:
while(!feof(rp))
{
if(isdigit(fgetc(rp)))
{
++result;
}
此代码块包含几个问题,包括格式不容易阅读。对这个问题的评论中已经详细说明了一些问题。建议:
int ch;
while(EOF != (ch = fgetc(rp)) )
{
if(isdigit(ch))
{
++result;
}
}
请注意,这计算每个数字,并且您说您只对整数感兴趣,整数可能是多个数字,因此您需要稍微修改建议的代码。我会让你做那个修改。
评论
while (!feof(file))
总是错的。这段代码是一个例外;当返回 EOF 时,后续将是准确的,并且您不会将 EOF 误视为数字。fgetc()
feof(rp)
'3'
所以.'4'
2