Scanf()无法识别%c之前的空格

时间:2014-08-19 17:06:52

标签: c variables if-statement whitespace scanf

观察这段代码:

#include <stdio.h>

int main(void)
{
    char choice;

    printf("\n\nDo you want to play again (Y/N)? ");
    scanf(" %c", &choice);

    if (choice != 'Y' || choice != 'y' || choice != 'N' || choice != 'n')
    {
        printf("\n\nYou didn\'t enter a decision.");
    }

return 0;
}

我希望printf()提示用户输入Y或N.scanf()将填充用户在变量 choice 中的输入。如果 choice 不等于Y,y,N或n,它将告诉用户他/她没有做出决定。然后,程序将结束。

然而,当我输入Y或N时,它打印出来了#34;你没有做出决定。&#34;只有在我不输入Y或N(小写或大写)时才会发生这种情况。

我甚至在转换字符前面放了一个空格,所以scanf()不会读取换行符(\ n)。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

更改

if (choice != 'Y' || choice != 'y' || choice != 'N' || choice != 'n')  

if (choice != 'Y' && choice != 'y' && choice != 'N' && choice != 'n')  

否则,您是否输入Y, y, N, n 或任何其他字符Jonathan Leffler中的comment所指),if中的表达式}将被评估为true

答案 1 :(得分:0)

你必须包括以下其他

#include <stdio.h>

int main(void)
{
    char choice;

    printf("\n\nDo you want to play again (Y/N)? ");
    scanf(" %c", &choice);

    if (choice != 'Y' || choice != 'y' || choice != 'N' || choice != 'n')
    {
        printf("\n\nYou didn\'t enter a decision.");
    }


return 0;
}