getchar()函数没有读取正确的值

时间:2013-11-11 20:43:11

标签: c scanf getchar

当我输入0时,程序结束。但if语句中有getchar()并且它不起作用,你能帮助我吗?

在案例0中,我希望它从用户获取char。如果输入'N''n',程序将结束,但如果不是,程序将重新开始。 (来自sec1)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;

    sec1:
    printf("Select a number between 4 and 0: ");
    scanf("%d[\n]", &n);

    switch(n)
    {
        case 0:
            puts("Are you sure?");
            puts("Yes(Y) or No(N)");
            if(getchar() == 'N') goto sec1;
            break;

        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;

        default:
            puts("Only numbers between 4 and 1 are accepted!");
            goto sec1;
            break;

    }
    system("pause");
    return 0;
}

工作一次

int main()
{
    int n, c;

    sec1:
    printf("Select a number between 4 and 0: ");
    scanf("%d/n", &n);

    switch(n)
    {
        case 0:
            puts("Are you sure?");
            puts("Yes(Y) or No(N)");
            fflush(stdin);
            if (getchar() == 'N') goto sec1;
            break;

        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;

        default:
            puts("Only numbers between 4 and 1 are accepted!");
            goto sec1;
            break;

    }
    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:1)

更改

scanf("%d[\n]",&n);

scanf("%d\n",&n);

原始代码不起作用的原因是因为scanf想要读取整数,“[”,“\ n”和“]”。因此,当您输入一个整数后跟“\ n”时,scanf只接受整数(因为它希望看到“[”)。然后getchar将简单地取剩下的“\ n”。这就是你的getchar()似乎不起作用的原因。

希望它对你有所帮助!

答案 1 :(得分:0)

当您读取“N”或“n”时,输入缓冲区中可能有一些符号。您需要在新读取之前刷新输入缓冲区。有关详细信息,请参阅this question

简单地写一下: while (getchar() != '\n') {}scanf(...)之后。

答案 2 :(得分:0)

我猜这是处于熟化模式的终端,因此当用户通过点击返回完成一行时,只将类型字符输入到程序中。您可以通过从管道输入输入而不是从终端交互式输入来测试它。