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

时间:2012-03-24 21:17:39

标签: c

CODE:

#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个数字,或者根据该数字输入任何数字,提示“你想输入另一个数字”。如果答案为否,则终止,如果是,则继续。

2 个答案:

答案 0 :(得分:6)

您的第一个scanf在缓冲区中留下换行符。这是因为%d忽略了尾随空白而%c没有。使用这个便宜的技巧让第二个scanf吃掉空白:

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

这个问题很常见,您可以在C FAQ中了解更多相关信息。

答案 1 :(得分:0)

%c之前需要一个空格,以便跳过scanf在数字末尾停止时未读取的换行符。

我有一些未经请求的建议......

  1. 不要直接使用scanf(3),要让它做你想做的事情太难了。通常最好使用fgets(3)然后使用sscanf(3)

  2. 打开警告进行编译。 (在我的Mac上,这意味着cc -Wall ...

  3. 启用警告后,您的程序会修复一些问题:

    #include <stdio.h>
    int main(void) {
    
        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);
            if (answer != 'y' && answer != 'Y')
              break;
            count += nums[i];
        }
        return 0;
    }