2014-09-22 90 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