繁体   English   中英

getchar()函数未读取正确的值

[英]getchar() function not reading the correct value

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

在案例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;
}

更改

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

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

您的原始代码不起作用的原因是scanf想要读取一个整数,即“ [”,“ \\ n”和“]”。 因此,当您输入一个整数后跟一个“ \\ n”时,scanf仅采用该整数(因为它希望看到一个“ [”)。 然后,getchar将仅采用其余的“ \\ n”。 这就是为什么您的getchar()似乎不起作用的原因。

希望对您有帮助!

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

简而言之,只需编写: while (getchar() != '\\n') {}scanf(...)

我猜这是处于烹饪模式的终端,因此仅当用户通过按回车键完成一行时才将键入的字符提供给程序。 您可以通过从管道而不是从终端以交互方式输入输入来对其进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM