gpt4 book ai didi

c - While 循环用 Char 中断

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:40 24 4
gpt4 key购买 nike

我有以下C代码

int selectTask = 1;
while (selectTask > 0 && selectTask < 7) {
printf("Please input which task to test: ");
scanf("%d", &selectTask);
}

这会按预期工作,直到我输入一个字符而不是数字,然后它会无限循环我的 printf。有谁知道它为什么这样做?

最佳答案

scanf 使用行缓冲区。如果缓冲区已用完,则换行;但是如果缓冲区中还有东西,它实际上不会接受新的输入。

此外,scanf 完全按照您的指示使用。如果你想要一个数字,它会消耗一个数字,或者失败。 scanf 的返回值是它成功消费的东西的数量。

因此,发生的情况是,您的第一个 scanf 读取了一个新行(因为缓冲区中没有任何内容);如果第一个字符恰好不是数字,它不会消耗任何东西并保持缓冲区不变,并返回 0 作为“零事物成功消耗”。下次你要求一个数字时,它会看到相同的字符,然后再次失败,再次不消耗任何东西。就好像这个角色卡在了喉咙里。

您可以通过在失败时读取缓冲区的其余部分、fflush-ing 缓冲区、读取一个字符串并自己解析它来绕过它……或者,因为您只需要一个字符,放弃 scanf,只使用 getchar

tl;dr:不要忽略 scanf 返回值 :)

关于c - While 循环用 Char 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55528241/

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