我的代码有问题,我有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/