【发布时间】:2016-03-10 21:06:04
【问题描述】:
我需要以有效的方式找到一个由用户确定的介于 1 到 1000 之间的数字。看起来它正在工作,但我有一个问题。每当 while 循环迭代时,它会自行迭代两次,我无法摆脱这种情况。所以我不能称之为“完全”工作。我的代码是:
#include <stdio.h>
int main()
{
int num = 500, div = 250;
char user;
printf("Please determine a number between 1 and 1000 and then press enter. \n");
scanf("%c", &user);
while ((user != 'Y') && (user != 'y'))
{
printf("Is your number %d? Please enter 'Y' if it is, 'S' if it is smaller and 'L' if it is larger. \n", num);
scanf("%c", &user);
if ((user == 'S') || (user == 's')) {
num -= div;
if (div != 1)
div /= 2;
}
if ((user == 'L') || (user == 'l')) {
num += div;
if (div != 1)
div /= 2;
}
}
printf("The number you determined is %d!", num);
return 0;
}
我该如何解决这个问题?
编辑:我无法从 CodeBlocks 中放置输出示例,所以现在从 Ubuntu 中添加它。输出如下:
请确定一个数字,然后按 Enter。
你的号码是 500 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。 s
你的号码是 250 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。
你的号码是 250 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。 s
你的号码是 125 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。
你的号码是 125 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。 l
你的号码是 187 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。
你的号码是 187 吗?如果是,请输入“Y”,如果较小,请输入“S” 如果它更大,则为“L”。是的
你确定的数字是187!
user3121023 已经解决了这个问题。我想既然是评论,我不能结束这个问题。
【问题讨论】:
-
感谢您的回复,我实际上读到 enter 也被接受为 char 并且因为它不是“y”,它进入 while 循环,然后获得正确的值,因此程序可以工作.我添加了 gedit 的输出,那还能是什么呢?
-
当我使用它时,它只是重复 scanf 直到我输入一个字符而不是输入,当我输入一个字符并输入时,它仍然可以工作两次。它看起来更像是 while 循环有问题,因为第一个 printf 和 scanf 工作正常。
-
哦,我的错...对不起,我的头有点模糊了。它现在可以正常工作。感谢您的帮助!
-
没问题。如果您觉得有用,请随时 accept an answer。
标签: c loops while-loop