gpt4 book ai didi

c - do-while 循环中的 scanf() 会导致无限循环,即使测试输入也是如此

转载 作者:行者123 更新时间:2023-11-30 16:51:44 29 4
gpt4 key购买 nike

我有这个:

float a, b, c;
int isInt;
do {
puts("Please enter three positive lengths:");
isInt = scanf(" %f %f %f", &a, &b, &c);
} while(a <= 0 || b <= 0 || c <= 0 || isInt != 3);

假设我的输入是 1 2 f,然后是 a == 1b == 2c = = 0 。更重要的是,isInt == 2,这让我想知道为什么它不能再次正常循环......?

最佳答案

代码中的问题在于,当 scanf(...) 返回 3 以外的数字时,您会做什么(更具体地说,就是不做什么)。

当前,您的代码继续请求输入并循环,而不从输入缓冲区获取任何内容。当然,这会使您的程序进入无限循环。

为了解决此问题,您的代码应该读取并忽略直到下一个 '\n' 字符的所有输入。这将确保每次循环迭代都取得一些进展。

do {
puts("Please enter three positive lengths:");
isInt = scanf(" %f %f %f", &a, &b, &c);
if (isInt == EOF) break; // Make sure EOF is handled
if (isInt != 3) {
scanf("%*[^\n]");
a = b = c = -1;
continue;
}
} while(a <= 0 || b <= 0 || c <= 0);

Demo.

关于c - do-while 循环中的 scanf() 会导致无限循环,即使测试输入也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620817/

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