【问题标题】:C: Scanf function in for loops runs one more time than it shouldC: for 循环中的 Scanf 函数运行时间比它应该运行的时间多一次
【发布时间】:2016-05-06 03:44:08
【问题描述】:

在下面的代码中,我希望用户输入 10 个浮点数,然后取它们的平均值。但是,在运行时,用户被强制输入 11 个数字,但第 11 个数字还是被丢弃了。平均值的值实际上是正确的。我只想知道为什么 scanf 似乎多跑了 1 次。

我遇到的问题与建议的副本不同。这里的问题和我对scanf函数的理解有关,其实我循环的次数是正确的。

见:

#include <stdio.h>

int main (void)
{
    int     i;
    float   entry[10];
    float   total = 0.0;

    printf("please enter 10 floating point numbers\n");

    for (i = 0; i < 10; ++i)
        scanf("%f\n", &entry[i]);

    for (i = 0; i < 10; ++i) {
        total = total + entry[i];
    }

    printf("The average of the 10 floating point numbers is: %f\n", total / 10);

    return 0;
}

【问题讨论】:

标签: c for-loop scanf


【解决方案1】:

格式字符串中的\n 导致了这种情况。

即使在输入第 10 个元素之后,scanf 也会在完成之前等待输入非空白字符。输入 10 个数字后,您可以输入任何旧的非空白字符让 scanf 完成。

从格式字符串中删除\n。你不需要它。使用

for (i = 0; i < 10; ++i)
    scanf("%f", &entry[i]);

【讨论】:

  • @ec2013,另请注意,您的原始代码实际上并不需要输入第十一个 数字。任何非空格都可以。
【解决方案2】:

删除scanf 内的\n,即在第一个for 循环内,写入:

scanf("%f",&entry[i]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2020-11-30
    • 2021-10-07
    • 2019-10-07
    相关资源
    最近更新 更多