C 检查是否输入了两个字符中的一个字符的循环将永远运行

C 检查是否输入了两个字符中的一个字符的循环将永远运行,c,while-loop,logical-operators,C,While Loop,Logical Operators,我试图使一个代码,将打印Yayy后,我按了正确的键m或o,但我在功能受阻。。。我可以按任何东西,但它仍然会要求我按一些东西 #include <stdio.h> int main() { char input_char; printf("Press a key:"); input_char = getc(stdin); printf("You pressed:%c\n", input_char); while (input_char != '

我试图使一个代码,将打印Yayy后,我按了正确的键m或o,但我在功能受阻。。。我可以按任何东西,但它仍然会要求我按一些东西

#include <stdio.h>
int main() {
    char input_char;
    printf("Press a key:");
    input_char = getc(stdin);
    printf("You pressed:%c\n", input_char);

    while (input_char != 'm' || input_char != 'o') {
        printf("Press a key:");
        input_char = getc(stdin);
        input_char = getc(stdin);
        printf("You pressed:%c\n", input_char);
    }
    printf("Yayyy");
}

想想这张支票:

while (input_char != 'm' || input_char != 'o') {
这表示当输入字符不是m或输入字符不是o时循环。但是如果你仔细想想,每个角色不是m就是o。你明白为什么吗?因此,这将永远循环

要解决此问题,请将循环更改为read

while (input_char != 'm' && input_char != 'o') {
也就是说,只要输入不是m,输入不是o,就循环。这样,如果输入为m或o,则循环停止运行。你明白为什么吗

还有一个小问题——没有理由在循环中调用getc两次。读两个字符,但你只能记住其中一个


希望这有帮助

想想这张支票:

while (input_char != 'm' || input_char != 'o') {
这表示当输入字符不是m或输入字符不是o时循环。但是如果你仔细想想,每个角色不是m就是o。你明白为什么吗?因此,这将永远循环

要解决此问题,请将循环更改为read

while (input_char != 'm' && input_char != 'o') {
也就是说,只要输入不是m,输入不是o,就循环。这样,如果输入为m或o,则循环停止运行。你明白为什么吗

还有一个小问题——没有理由在循环中调用getc两次。读两个字符,但你只能记住其中一个


希望这有帮助

您希望用户按m或o,因此循环应该在输入不是m和o时运行。您需要更改此行:

当输入_char!='m'| |输入字符!='o'

为此:


当输入_char!='m'&&input_char!='o'

您希望用户按下m或o,因此循环应该在输入不是m和不是o时运行。您需要更改此行:

当输入_char!='m'| |输入字符!='o'

为此:


当输入_char!='m'&&input_char!='这能回答你的问题吗?这回答了你的问题吗?非常感谢。。我现在觉得自己太傻了:D我看了两天都想不出来:D别担心!这是程序员经常犯的错误。因此,为自己已经学会了足够多的编码,甚至犯了这个错误而拍拍自己的背,为将来做好记录,祝你好运!而且我在循环bcs中调用了两次getc,在我按enter键后,代码中的第一个getc将离开\n。。。所以我需要摆脱它。可能这个问题的解决方案应该类似于scanf%*[^\n]Thx。。我现在觉得自己太傻了:D我看了两天都想不出来:D别担心!这是程序员经常犯的错误。因此,为自己已经学会了足够多的编码,甚至犯了这个错误而拍拍自己的背,为将来做好记录,祝你好运!而且我在循环bcs中调用了两次getc,在我按enter键后,代码中的第一个getc将离开\n。。。所以我需要摆脱它。可能这个问题的解决方案应该是这样的scanf%*[^\n]