我需要找到一个由用户以有效方式在1到1000之间确定的数字。它看起来像在工作,但我有一个问题。每当while循环迭代时,它会自我迭代两次,我无法逃避这种情况。所以我不能称之为“完全”工作。我的代码是: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中。输出如下:
请确定一个数字,然后按回车。
你的号码是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”。 y
您确定的数字是187!
user3121023已经解决了这个问题。我认为既然这是一个评论,我不能解决这个问题。
感谢您的回复,我实际上读到enter也被接受为char,并且因为它不是“y”,它会在while循环中获取正确的值,以便程序正常工作。我添加了来自gedit的输出,那还有什么呢? – morpheus
当我使用它时,它只是重复scanf,直到我输入一个字符而不是输入,并且当我输入一个字符并输入时,它仍然会工作两次。它看起来更像是while循环有问题,因为首先printf和scanf工作正确。 – morpheus
哦,我的坏...抱歉,我的脑袋因为有点模糊。它现在可以正常工作。谢谢你的帮助! – morpheus