【问题标题】:C - An if-else statement gets stuck and crashesC - if-else 语句卡住并崩溃
【发布时间】:2018-05-06 06:15:30
【问题描述】:

我有一个代码问题,我有一个 if-else 语句,它需要输入一个整数,否则会再次要求输入数字。代码在 while 语句中,问题是当我输入除整数以外的任何内容时,循环卡在给出 else 语句并崩溃

static inline void number_console(void)
{
int x = 0;
fprintf_P(stdout, PSTR(GET_NR_MSG));
lcd_goto(0x40);

if (scanf("%d", &x) == 1 && x >= 0 && x <= 9) {
    printf("\nYou entered number: ");
    fprintf_P(stdout, (PGM_P)pgm_read_word(&numbers[x]));
    fputc('\n', stdout);
    lcd_puts_P((PGM_P)pgm_read_word(&numbers[x]));
    lcd_putc(' ');
} else {
    printf("invalid input\n");
    }
}

代码也用在while语句中

while (1) {
    blink_leds();
    number_console();
}

【问题讨论】:

    标签: c if-statement while-loop scanf


    【解决方案1】:

    嗯,你解决了一半的问题。

    您检查了scanf() 失败,这很好,但是当匹配失败时,缓冲区中的输入不会被消耗,它仍然存在(等待下一次出现scanf() 来读取它)。

    因此,相同的输入(无效)被一遍又一遍地输入。在scanf检查的else部分,需要清理无效输入的缓冲区。一个非常基本的方法是

    } else {
        printf("invalid input\n");
        while (getchar() != '\n');
        }
    }
    

    【讨论】:

    • 或者,如果用户希望按回车键,则始终将 getchar() 放在 scanf() 之后。
    猜你喜欢
    • 2014-08-12
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多