【问题标题】:fscanf inside a do-while not workingfscanf 在 do-while 不工作时
【发布时间】:2014-10-06 03:33:13
【问题描述】:

所以,我在使用 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

谁能帮帮我?

【问题讨论】:

  • 您调用 fscanf 两次,一次在 do-while 循环中,一次在 while 测试中!这样一读,你就输了。

标签: c loops do-while scanf


【解决方案1】:

您正在丢弃对fscanf 的每一秒调用的结果。

while 条件中,您调用fscanf 并检查EOF,但您不使用i 的值。然后下一条语句回到循环顶部,执行另一个 fscanf 读取下一个值(并且不检查错误)。

此外,如果文件包含任何不是有效double 的文本,则会出现无限循环。

循环应该是:

while ( fscanf(f, "%lf", &i) == 1 )
{
    printf(" %.0f", i);
}

【讨论】:

    【解决方案2】:

    应该是:

    #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 ", &amp;i); 之后,f 包含1。现在在fscanf(f, "%lf", &amp;i) != EOF 之后,f 包含2。您没有打印 2 并且在下一个 fscanf(f, "%lf ", &amp;i); 之后,f 将包含 3。简而言之,您在每个循环中调用 fscanf 两次,而 printf 仅调用一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多