C: for 循环中的 Scanf 函数比它应该多运行一次

标签 c for-loop scanf

在下面的代码中,我希望用户输入 10 个 float ,然后取它们的平均值。然而,在运行时,用户被强制输入 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;
}

最佳答案

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

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

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

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

关于C: for 循环中的 Scanf 函数比它应该多运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063850/

相关文章:

c - 守护进程无法找到文件(通过相对路径指定)

c - 如何在结构数组的末尾提供哨兵值

java - 错误 : cannot find symbol- variable. 引用 ".length"

Javascript 使用 for 循环累加器将数字添加到表格单元格 ID

c - 如何在c中扫描以逗号分隔的字符串中的数字

C——scanf 或 fgets 似乎都没有执行

c - 对安装在 OS X 上的 Berkeley db C api 有很好的介绍吗?

Python循环PEP8规则

c - 带有可变参数的 scanf(C 语言)

使用 strcpy() 函数的正确方法?