在混合类型的文件中读取整数,"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;
}
}
请注意,这会计算每个数字,您说您只对整数感兴趣,整数可能是多位数字,因此您需要稍微修改建议的代码。我会让你做那个修改。
我的程序中出现错误(应该在字符和整数文件中找到所有整数),其中 "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;
}
}
请注意,这会计算每个数字,您说您只对整数感兴趣,整数可能是多位数字,因此您需要稍微修改建议的代码。我会让你做那个修改。