【发布时间】:2017-09-16 02:39:51
【问题描述】:
我是一名自学成才的开发人员,试图学习 c++,我在 google 上找到了这个练习,并为它编写了代码,虽然我的所有条件都是正确的,但它不起作用,当我检查他们的答案时,我发现这行代码 - if (!(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)) } 做了什么?还有其他原因我的循环不起作用吗?
【问题讨论】:
-
您不会在循环中读取答案 - 您的用户只会得到一个猜测。
-
cin >> guess是输入操作——它从标准输入流中读取下一个输入值并将其存储在guess中。由于您正在读取整数变量,因此如果输入字符串不是有效的整数常量(包含数字以外的内容),则操作将失败(评估为假)。如果您输入的不是整数,您会收到"Please enter only numbers"消息 - 否则它将输入与随机数进行比较。 -
扩展至@JohnBode 对正在发生的事情的评论:Why and how it happens。更多详情:en.cppreference.com/w/cpp/io/basic_ios/operator_bool