我自学的开发人员试图学习c ++,我在google上找到了这个练习,我为它编写了代码,虽然我的所有条件都是正确的,当我检查他们的答案时它不会起作用,我找到了这行代码 - 如果(!(cin>> guess))。老实说,我没有看到相关性,我不知道为什么它让我的循环无法工作。这是我的代码:
int main(int argc, char* argv[])
{
int nUserRandNum = 0;
int randomNumber=0;
srand (time(NULL));
randomNumber = rand() % 100 + 1;
printf("Please enter a random number between 1 - 99 \n");
scanf("%d", &nUserRandNum);
do
{
if (randomNumber < nUserRandNum)
{
printf("Try to go a little higher than \n", nUserRandNum);
}
else
{
printf("You might want to go a little lower than \n", nUserRandNum);
}
}
while (randomNumber != nUserRandNum);
printf("You got it!!!");
system("Pause");
return 0;
}
当我检查答案时:
int random_number, guess;
// Initialize random seed.
srand (time(NULL));
// Generate random number between 1 and 100
random_number = rand() % 100 + 1;
cout << "Guess our number (1 to 100) ";
cin>>guess;
do
{
if (!(cin >> guess))
{
cout << "Please enter only numbers" << endl;
}
else
{
if (random_number < guess)
cout << "The secret number is lower than " << guess << endl;
else if (random_number > guess)
cout << "The secret number is higher than " << guess << endl;
}
} while (random_number != guess);
cout << "Congratulations!" << endl;
if语句执行{if (!(cin >> guess)) }
是什么意思?还有其他原因我的循环没有用吗?
答案 0 :(得分:2)
scanf
和cin >>
之间的差异与此无关,而不是它的作用。
这里有你所拥有的:
scanf("%d", &nUserRandNum);
do
{
... print ...
}
while (randomNumber != nUserRandNum);
您的scanf
不在循环中。因此,当满足do
... while
条件时,将再次检查用户已输入的相同的数字。
这需要在循环体内部,如下所示:
do
{
scanf("%d", &nUserRandNum);
... print ...
}
while (randomNumber != nUserRandNum);
从cin
读取输入而不是使用scanf
可能是一个好主意,因为它不容易出错。 (尽管您已经展示的代码仍然设法这样做。)
检查数字是否成功读取也可能是一个好主意。当用户输入随机垃圾时,您不应该将其视为用户输入了数字。
但这些都不是你问题的原因。
答案 1 :(得分:1)
您可以将if (!(cin >> guess))
语句理解为&#34;如果输入的数字不成功&#34;,那么如果用户输入的类型确实是int,则(cin >> x)
为真。
Nitpick:你换了#34;走低了#34;与&#34;走得更高&#34;顺便说一句。