c - 为什么这个 C 程序会完全跳过我的输入?

标签 c

代码:

#include <stdio.h>
main() {

    int nums[100], i;
    char answer;
    int count = 0;
    double avg;

    for (i = 0; i < 100; i++) {
        printf("Enter number %d: ", i + 1);
        scanf("%d", &nums[i]);
        printf("Another? ");
        scanf("%c", &answer);
        count += nums[i];
    }
}

运行:

~> a.out
Enter number 1: 1
Another? Enter number 2: 2
Another? Enter number 3: 3
Another? Enter number 4: 4
Another? Enter number 5: 5
Another? Enter number 6: 6
Another? Enter number 7: 7
Another? Enter number 8: 8
Another? Enter number 9:

它应该问我是否要输入另一个数字,但由于某种原因 scanf 不工作。另外,我需要这样做,以便用户可以输入 100 个数字或低于该数字的任何数字,并提示“您要输入另一个数字”的问题。如果答案是否定的,它终止,如果是,它继续。

最佳答案

您的第一个 scanf 在缓冲区中留下一个换行符。这是因为%d %c 时忽略尾随空格没有。使用这个廉价技巧制作第二个 scanf吃空白:

scanf(" %c", &answer);
       ^

这个问题很常见,您可以在 C FAQ 中阅读更多相关信息.

关于c - 为什么这个 C 程序会完全跳过我的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855699/

相关文章:

c - 它只显示一个酒店预订

c - 在 C 中包含动态字符数组的结构

c++ - 编译器怎么会认为这个变量不是常量?

c - makefile 在 Scons 中定义等效项

java - 将 C 结构体转换为 Java 结构体

c - 算术和几何平均误差求解

c - 为什么我的 shell 在终止进程后打印不正确?

c++ - 从代码块开始,构建 Hello world 不起作用(权限被拒绝)

Case 标签不会缩减为 C 中的整数常量?

c - 将数据值列表写入 .dat 文件以在 GNUplot 中绘制(在 C 中)