2012-07-16 21 views
7

Ho una funzione per restituire un bool:funzione C++ booleana ritorno 56

bool restart() 
{ 
    std::string answer; 
    bool answered = false; 
    while(answered == false) 
    { 
     cout << endl << endl << "Do you want to play again? y/n : "; 
     cin >> answer; 
     if(answer == "y" || answer == "Y" || answer == "1" || answer == "yes") 
     {return true;} 
     if(answer == "n" || answer == "N" || answer == "0" || answer == "no") 
     {return false;} 
    } 
} 

Quando chiamo utilizzando:

cout << restart(); 

io ottenere l'output:

Do you want to play again? y/n : y 
56 

Can qualcuno vede come risolvere questo strano problema? Grazie in anticipo.

Il mio codice WIP come è ora:

#include <iostream> 
#include <cstdlib> 

using namespace std; 

void drawScreen(int grid[3][3]);        // 
int movef(int grid[3][3], bool playersMove); 
int updateGrid(int grid[3][3], int move, bool playersMove); 
bool hasWon(int grid[3][3]); 
bool swapMover(bool playersMove);        // 
bool restart(); 
void endGame(); 

int main() 
{ 
    int grid[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
    bool appRunning = true, gameRunning = true, playersMove = true; 
    int move; 

    // tests // 
    std::cout << restart(); 
    // tests // 

    //while(appRunning == true) 
    //{ 
    // while(gameRunning == true) 
    // { 
    //  drawScreen(grid); 
    //  move = movef(grid, playersMove); 
    //  grid[3][3] = updateGrid(grid, move, playersMove); 
    //  drawScreen(grid); 
    //  gameRunning = hasWon(grid); 
    //  playersMove = swapMover(playersMove); 
    // } 
    // appRunning = restart(); 
    //} 
    //endGame(); 
    } 

    void drawScreen(int grid[3][3]) 
    { 
     for(int i = 0; i < 3; i++) 
     { 
      for(int j = 0; j < 3; j++) 
      { 
      if(grid[i][j] == 10){cout << "X ";if(j == 2){cout << endl << endl;}} 
      if(grid[i][j] == 11){cout << "O ";if(j == 2){cout << endl << endl;}} 
      if(grid[i][j] != 10 && grid[i][j] != 11){cout << grid[i][j] << " "; 
      if(j == 2){cout << endl << endl;}} 
      } 
     } 
    } 

    int movef(int grid[3][3], bool playersMove) 
    { 
     return 0; 
    } 

    int updateGrid(int grid[3][3], int move, bool playersMove) 
    { 
     return 0; 
    } 

    bool hasWon(int grid[3][3]) 
    { 
     return false; 
    } 

    bool swapMover(bool playersMove) 
    { 
     if(playersMove == true){return false;} 
     if(playersMove == false){return true;} 
    } 

bool restart() 
{ 
    std::string answer; 
    bool answered = false; 
    while(answered == false) 
    { 
     cout << endl << endl << "Do you want to play again? y/n : "; 
     cin >> answer; 
     if(answer == "y" || answer == "Y" || answer == "1" || answer == "yes") 
     {return true;} 
     if(answer == "n" || answer == "N" || answer == "0" || answer == "no") 
     {return false;} 
    } 
} 

void endGame() 
{ 

} 
+1

Come si stampa il valore restituito? 'cout << restart()'? – RedX

+0

Sì. È stato usato come parte del mio ciclo principale. Un valore di bool del giocoL'avvio è stato impostato usando gameRunning = restart(); e ho continuato a ricevere 56. Quindi ho testato la funzione stessa usando cout << restart(); e ottengo ancora 56 – jw1294

+1

Restituisce 56 nel caso di "no" pure? –

risposta

1

Ho usato il compilatore mingw32, quando uso g ++ 4.8 funziona correttamente. Sembra essere un errore del compilatore. (grazie a grizzly)

4

[Questo è un po 'di un repost di mio commento in quanto OP ha detto che risolto il suo problema]

Non hai valore di ritorno definito al di fuori della mentre ciclo. Se in qualche modo ne esci, non restituisci un valore (anche se non ho idea del comportamento previsto o anche se in questo caso è previsto un comportamento)

Per rendere la mia risposta un po 'più approfondita, ho lo ha trovato: Why does flowing off the end of a non-void function without returning a value not produce a compiler error?

+2

In effetti GCC avvisa di questo. Non ho idea di come sarebbe uscito, però. – chris

3

OK, sto facendo un'ipotesi. Il tuo codice originale ha la linea di

grid[3][3] = updateGrid(grid, move, playersMove); 

E la vostra definizione griglia è

int grid[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 

Questo significa che la stanno scrivendo fuori dei limiti dell'array. Questo è un comportamento indefinito. Si prega di correggere questo e controllare se il programma funziona come previsto.

Problemi correlati