2014-09-22 96 views
-2

我发这个猜数字游戏基于此代码的类分配C++ Random number guessing gamec + +猜数字游戏,而功能

我第一次尝试用“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"); 
             } 
            } 
          } 
        } 
      } 
    } 
} 
+0

尝试使用valgrind。 – 2014-09-22 12:44:38

+0

你想调试它来找出它崩溃的地方(行)。无法立即看到问题。 – noelicus 2014-09-22 12:44:41

+0

你是否想'else if(prova EdChum 2014-09-22 12:45:11

回答

4

您的程序没有崩溃,它只是比您想要的更早退出。问题是两个环路之间的相互作用:

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

Periodo开始了作为0和第一次迭代之后具有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"); 
      } 
     } 
    } 
} 

由于Periodo1值时,它进入循环。您然后递减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; 

其中循环目前是。

+0

我不得不说,我也对'if(Nuovogioco == 0){...}'很感兴趣,因为在上一行将它初始化为'0'时,它总是'真'。 – Baldrickk 2014-09-22 13:27:46