C ++猜测数字游戏崩溃与while功能

时间:2014-09-22 12:41:57

标签: c++

我根据此代码C++ Random number guessing game

制作了一个类别分配的数字游戏

我首先尝试使用“goto”功能制作它并且效果很好,但是我的老师说我需要使用“while”来制作它。

问题是程序在“Troppo basso”之后继续关闭!和“Troppo alto!”消息出现,有人可以告诉我为什么吗?

#include <iostream>
using namespace std;

int main()
{
    int Nuovogioco = 0;
    if (Nuovogioco == 0)
    {
          srand(time(0)); 
          int Numero = rand() % 100 + 1;
          int prova;
          int Variabile;
          int Periodo = 0;
          Nuovogioco++;
          {
                     while (Periodo <1 )
                     {
                           cout << "A che numero sto pensando da 1 a 100? ";
                           cout <<endl;
                           cout << "Se vuoi uscire digita e quando vuoi!";
                           cout <<endl;
                           cout << "Inserisci un numero: ";
                           Periodo++;
                     }
                     while (Periodo > 0)
                     {
                           cin >> prova;
                           if (prova > Numero) 
                           {
                                     cout << "Troppo alto!" <<endl;
                                     Periodo--;
                           }
                           if (prova < Numero)
                           {
                                     cout << "Troppo basso!" <<endl;
                                     Periodo--;
                           }
                           if (prova == Numero)
                           { 
                                     cout << "Hai vinto! Se vuoi rigiocare digita 1, altrimenti digita 2!";
                                     cin >> Variabile;
                                     {
                                         if  (Variabile == 1)
                                         {
                                             Variabile--;
                                             Nuovogioco--;
                                         }
                                         if  (Variabile == 2)
                                         { 
                                             cout << "Byebye!  ";
                                             system ("pause");
                                         }
                                     }
                           }
                     }
          }
    }
}

1 个答案:

答案 0 :(得分:4)

您的程序没有崩溃,它只是提前退出。问题是两个循环之间的相互作用:

while (Periodo <1 )
{
    /* output */
    Periodo++;
}

Periodo0开头,第一次迭代后的值为1。循环终止,然后传递给下一个循环:

while (Periodo > 0)
{
    cin >> prova;

    if (prova > Numero) 
    {
        cout << "Troppo alto!" <<endl;
        Periodo--;
    }
    if (prova < Numero)
    {
        cout << "Troppo basso!" <<endl;
        Periodo--;
    }
    if (prova == Numero)
    { 
        cout << "Hai vinto! Se vuoi rigiocare digita 1, altrimenti digita 2!";
        cin >> Variabile;
        {
            if  (Variabile == 1)
            {
                Variabile--;
                Nuovogioco--;
            }
            if  (Variabile == 2)
            { 
                cout << "Byebye!  ";
                system ("pause");
            }
        }
    }
}

由于Periodo的值为1,因此它会进入循环。然后递减Periodo,它取值0 循环终止,因为0不是>0

您需要将Periodo设置为您想要的猜测次数(目前只有1)。
尝试将Periodo初始化为该数字:

int Periodo = 10; //set to number of guesses

你可以删除第一个循环,它实际上并没有做任何事情。只需留下你的输出:

cout << "A che numero sto pensando da 1 a 100? " << cout <<endl;
cout << "Se vuoi uscire digita e quando vuoi!"   << cout <<endl;
cout << "Inserisci un numero: "                  << cout <<endl;

当前循环的位置。