0

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

在案例 0 中,我希望它从用户那里获取字符。如果输入'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;
}
4

3 回答 3

1

改变

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

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

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

希望对你有帮助!

于 2013-11-11T20:54:56.207 回答
0

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

简单地写: while (getchar() != '\n') {} 就在scanf(...).

于 2013-11-11T20:52:22.000 回答
0

我猜这是处于熟化模式的终端,因此只有当用户通过按回车键完成一行时才将键入的字符输入程序。您可以通过从管道输入而不是从终端交互地输入来测试它。

于 2013-11-11T21:08:57.210 回答