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

最佳答案

好吧,您已经解决了一半的问题。

您检查了scanf()失败,这很好,但是当匹配失败时,缓冲区中的输入不被占用,而是保留在那里(等待下一次出现的scanf()读取)。

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

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

关于c - C-if-else语句卡住并崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47435867/

10-11 23:12
查看更多