2012-07-16 75 views
7

我有一个函数返回一个bool:C++布尔函数返回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;} 
    } 
} 

当我把它用:

cout << restart(); 

我得到的输出:

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

灿任何人看到如何解决这个奇怪的问题? 在此先感谢。

我WIP的代码,因为它现在是:

#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

如何打印返回值? 'cout << restart()'? – RedX 2012-07-16 16:11:30

+0

是的。它被用作我主循环的一部分。一个布尔值gameRunning被设置为它使用gameRunning = restart();我一直得到56.所以我使用cout << restart();测试了函数本身。我仍然得到56 – jw1294 2012-07-16 16:14:06

+1

在“否”的情况下它是否返回56? – 2012-07-16 16:14:43

回答

1

我使用了mingw32编译器,当使用g ++ 4.8时它工作正常。这似乎是一个编译器错误。 (感谢灰熊)

4

[这是我的评论的重新发布的有点,因为OP说,它解决了他的问题]

你的外部定义没有返回值while循环。如果不知为何,你拿到它之外,你没有返回值(虽然我不知道什么是正常现象,或者即使任何行为,在这种情况下预期)

为了让我的回答有点更彻底,我有发现这个: Why does flowing off the end of a non-void function without returning a value not produce a compiler error?

+2

确实GCC警告这一点。尽管如此,我不知道它会如何脱身。 – chris 2012-07-16 16:47:04

3

好吧,我在猜测。你原来的代码有行

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

而网格的定义是

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

这意味着你编写出数组边界。这是未定义的行为。 请更正此问题并检查您的程序是否按预期工作。