2012-07-16 31 views
7

Tôi có một hàm trả về một bool:C++ Boolean chức năng quay trở lại 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;} 
    } 
} 

Khi tôi gọi nó là sử dụng:

cout << restart(); 

tôi nhận được kết quả:

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

Can có ai thấy cách khắc phục vấn đề kỳ lạ này không? Cảm ơn trước.

đang WIP của tôi như bây giờ:

#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

Làm thế nào để bạn in giá trị trả về? 'cout << restart()'? – RedX

+0

Có. Nó được sử dụng như một phần của vòng lặp chính của tôi. Một giá trị bool gameRunning được đặt thành nó bằng cách sử dụng gameRunning = restart(); và tôi tiếp tục nhận được 56. Vì vậy, tôi đã thử nghiệm hàm này bằng cách sử dụng cout << restart(); và tôi vẫn nhận được 56 – jw1294

+1

Nó có trả về 56 trong trường hợp "không" không? –

Trả lời

1

Tôi đã sử dụng trình biên dịch mingw32, khi sử dụng g ++ 4.8, nó hoạt động tốt. Nó có vẻ là một lỗi trình biên dịch. (nhờ grizzly)

4

[Đây là phần nào của một repost của nhận xét của tôi kể từ khi OP nói nó giải quyết vấn đề của mình]

Bạn không có giá trị trả về định nghĩa bên ngoài của trong khi lặp lại. Nếu bằng cách nào đó bạn nhận được bên ngoài của nó, bạn không trả lại một giá trị (mặc dù tôi không có ý tưởng những gì hành vi dự kiến ​​hoặc thậm chí nếu bất kỳ hành vi được mong đợi trong trường hợp này)

Để làm cho câu trả lời của tôi một chút kỹ lưỡng hơn, tôi có tìm thấy điều này: Why does flowing off the end of a non-void function without returning a value not produce a compiler error?

+2

Thật vậy GCC cảnh báo về điều này. Tôi không có đầu mối làm thế nào nó sẽ nhận ra, mặc dù. – chris

3

OK, tôi đang đoán. mã ban đầu của bạn có dòng

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

Và định nghĩa lưới của bạn là

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

Điều này có nghĩa rằng bạn đang viết ra khỏi giới hạn mảng. Đây là hành vi không xác định. Vui lòng sửa lỗi này và kiểm tra xem chương trình của bạn có hoạt động như mong đợi không.

Các vấn đề liên quan