int findMaxAndMinValues(FILE *file)
{
int current_number, max_number = INT_MIN, min_number = INT_MAX;
rewind(file);
while ( fscanf(file, "%d", ¤t_number)!=EOF )
{
printf("%d \n", current_number);
if (current_number > max_number) max_number = current_number;
if (current_number < min_number) min_number = current_number;
}
printf("Max: %d, Min: %d\n", max_number, min_number);
return 0;
}
因此,如果文本文件仅充满数字(以及相应的空格/换行符),则效果很好。但是,如果其中有一个字符,它就会开始循环遇到该字符之前读取的最后一个数字。 这是文本文件:
1
2
3 4 5
16
12312
hello
结果就是 12312 每行不断更新。
附带问题:是否有更好的方法来查找文本文件中数字的最小/最大值?而不是使用 %d 进行 fscanf ?
编辑:感谢您的回答,这是我修复它的方法:
int findMaxAndMinValues(FILE *file)
{
int current_number, max_number = INT_MIN, min_number = INT_MAX;
int temp;
rewind(file);
while ( (temp=fscanf(file, "%d", ¤t_number))!=EOF )
{
if (!temp) { fgetc(file); }
else {
printf("%d \n", current_number);
if (current_number > max_number) max_number = current_number;
if (current_number < min_number) min_number = current_number;
}
}
printf("Max: %d, Min: %d\n", max_number, min_number);
return 0;
}
最佳答案
阅读手册页。 fscanf()
可以返回除 EOF
之外的其他值。特别是,如果转换失败 - 特别是如果 fscanf()
遇到非数字字符 - 它将返回零以指示未读取任何内容。
您需要根据此信息采取行动。否则下次也将返回零。此后的时间,无穷无尽。
关于C fscanf 从不返回 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425325/