fscanf里面没有工作

时间:2014-10-06 03:33:13

标签: c loops do-while scanf

因此,我在使用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

任何人都可以帮助我吗?

2 个答案:

答案 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只调用一次。