L oop для проверки, был ли введен один из двух символов, работает вечно - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь создать код, который будет печатать «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");
}

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Вы хотите, чтобы пользователь нажимал m или o, поэтому l oop должен работать, пока ввод не m и не o. Вам необходимо изменить эту строку:

while (input_char != 'm' || input_char != 'o')

На это:

while (input_char != 'm' && input_char != 'o')

3 голосов
/ 17 апреля 2020

Подумайте об этой проверке:

while (input_char != 'm' || input_char != 'o') {

Это говорит "l oop, в то время как input_char не m или input_char не o". Но если подумать, каждый символ либо не m, либо не o. (Вы понимаете, почему?) В результате это будет l oop навсегда.

Чтобы это исправить, измените l oop на

while (input_char != 'm' && input_char != 'o') {

, который говорит: "l oop, если вход не m и , то вход не o. " Таким образом, если вход был m или вход o, l oop останавливается. (Вы понимаете, почему?)

Еще одно небольшое исправление - нет смысла дважды вызывать getc внутри l oop. Это читает два символа, но вы помните только один из них.

Надеюсь, это поможет!

...