if(!(cin>> variableName))在此循环中的相关性是什么?

时间:2017-04-19 18:00:10

标签: c++ loops random do-while

我自学的开发人员试图学习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)) }是什么意思?还有其他原因我的循环没有用吗?

2 个答案:

答案 0 :(得分:2)

scanfcin >>之间的差异与此无关,而不是它的作用。

这里有你所拥有的:

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;顺便说一句。