Return Function Boolean function 56

I have a function to return bool:

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;} } } 

When I call it using:

 cout << restart(); 

I get the output:

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

Can anyone understand how to fix this strange problem? Thanks in advance.

My WIP code as of now:

 #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() { } 
+7
source share
3 answers

I used the mingw32 compiler, when using g ++ 4.8 it works fine. This seems to be a compiler error. (thanks to grizzly bear)

+1
source

[This is a bit like a comment, as the OP said it solved its problem]

You have no return value outside the while loop. If somehow you go beyond it, you do not return a value (although I do not know what behavior is expected or even if any behavior is expected in this case)

To make my answer more thorough, I found the following: Why does the non-void function turn off without returning a value that does not lead to a compiler error?

+4
source

OK, I think. There is a line in the source code

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

And the definition of your grid

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

This means that you are writing the boundaries of the array. This behavior is undefined. Please fix this and check if your program is working as expected.

+3
source

All Articles