gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:35:12 38 4
gpt4 key购买 nike

我的代码有问题,其中有 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 - if-else 语句卡住并崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47435867/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com