C - if-else语句卡住并崩溃

时间:2017-11-22 13:23:58

标签: c if-statement while-loop scanf

我有一个代码问题,我有和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();
}

1 个答案:

答案 0 :(得分:3)

嗯,你处理了一半的问题。

你检查了scanf()失败,没关系,但是当匹配失败时,缓冲区中的输入没有被消耗,它仍然存在(等待下一次出现scanf()来读取它)

因此,反复输入相同的输入(无效)。在scanf检查的else部分,您需要清理无效输入的缓冲区。这样做的一个非常基本的方法是

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