我有一个代码问题,我有和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();
}
答案 0 :(得分:3)
嗯,你处理了一半的问题。
你检查了scanf()
失败,没关系,但是当匹配失败时,缓冲区中的输入没有被消耗,它仍然存在(等待下一次出现scanf()
来读取它)
因此,反复输入相同的输入(无效)。在scanf检查的else
部分,您需要清理无效输入的缓冲区。这样做的一个非常基本的方法是
} else {
printf("invalid input\n");
while (getchar() != '\n');
}
}