C - Noob错误与简单的3向比较

时间:2013-10-13 22:25:34

标签: c getch

对于这个愚蠢的问题道歉,我是一个初学者,并且无法理解为什么以下代码无法正常工作。

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

int main()
{
    int j = ' ';
    int check = 0;

    printf("\nPlease enter A, B, or C\n");
    j = getch();

    while(check == 0)
    {
        if(j != 'A' || 'B' || 'C')
        {
            printf("\nInvalid entry, please enter either an A, B, or C\n");
            j = getch();
        }
        else
        {
            check = 1;
        }
    }
}

我希望这个简单的程序可以使用getch()接受A,B或C(是的,我需要使用getch())并使用我的while循环来确认条目实际上是A,B或C.但是,我运行程序,即使我输入A,B或C,程序也会告诉我输入无效。有人可以帮助我,告诉我我做错了吗?

我有一种感觉,这与它将字符作为ASCII整数读入这一事实有关,但我真的不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:4)

if(j != 'A' || 'B' || 'C')

相当于

if(j != 'A' || 'B' != 0 || 'C' != 0)

'B''C'都具有非零值,因此条件将始终评估为真。

我想您要检查j是否不是列出的任何值。如果是这样,该行应

if(j != 'A' && j != 'B' && j != 'C')

答案 1 :(得分:0)

执行以下替换:

int j = ' '; /* to */  char j = ' ';

if(j != 'A' || 'B' || 'C') /* to */ if(j != 'A' && j != 'B' && j != 'C')

j = getch(); /* to */ j=getchar();

此外,要使getchar()正常工作,请根据需要添加<conio.h>