因此,我在使用do-while循环读取文件时遇到问题:
#include <stdio.h>
int main(){
FILE* f = fopen("teste.txt", "r");
double i;
do{
fscanf(f, "%lf ", &i);
printf(" %.0lf", i);
} while (fscanf(f, "%lf", &i) != EOF);
return 0;
}
该文件是:
1 2 3 4 5
当我运行程序时,输出为:
1 3 5
任何人都可以帮助我吗?
答案 0 :(得分:7)
您正在放弃每次拨打fscanf
的结果。
在while
条件下,您拨打fscanf
并检查EOF
,但不使用i
的值。然后下一个语句返回到循环的顶部,执行另一个fscanf
,它读取下一个值(并且不检查错误)。
此外,如果文件包含任何不是有效double
的文本,则会出现无限循环。
循环应该是:
while ( fscanf(f, "%lf", &i) == 1 )
{
printf(" %.0f", i);
}
答案 1 :(得分:0)
应该是:
#include <stdio.h>
int main() {
FILE* f = fopen("teste.txt", "r");
double i;
fscanf(f, "%lf ", &i);
do {
printf(" %.0lf", i);
} while (fscanf(f, "%lf", &i) != EOF);
return 0;
}
在fscanf(f, "%lf ", &i);
之后,f
包含1
。在fscanf(f, "%lf", &i) != EOF
之后,f
包含2
。您没有打印2
,而在下一个fscanf(f, "%lf ", &i);
后,f
将包含3
。简而言之,您在每个循环中调用fscanf
两次,printf
只调用一次。