C++ C++;返回56的布尔函数
我有一个返回布尔值的函数:C++ C++;返回56的布尔函数,c++,C++,我有一个返回布尔值的函数: 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
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;}
}
}
有人知道如何解决这个奇怪的问题吗?
提前谢谢
我现在的在制品代码:
#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()
{
}
#包括
#包括
使用名称空间std;
空屏幕(整数网格[3][3])//
int movef(int grid[3][3],bool playersMove);
int updateGrid(int grid[3][3],int move,bool playersMove);
布尔·哈斯旺(国际网格[3][3]);
布尔斯瓦普莫尔(布尔玩家移动)//
bool重启();
无效终局();
int main()
{
int grid[3][3]={{1,2,3},{4,5,6},{7,8,9};
bool appRunning=true,gameRunning=true,playersMove=true;
int-move;
//测验//
std::cout[这有点像是我的评论的转载,因为OP说它解决了他的问题]
您没有在while循环之外定义返回值。如果您以某种方式超出了while循环,则不会返回值(尽管我不知道预期的行为是什么,甚至不知道在这种情况下是否预期任何行为)
为了让我的回答更透彻一点,我发现:
好的,我在猜测。您的原始代码有一行
grid[3][3] = updateGrid(grid, move, playersMove);
您的网格定义是
int grid[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
这意味着您正在写入超出数组边界的内容。这是未定义的行为。
请更正此错误并检查您的程序是否按预期工作。我使用了mingw32编译器,当使用g++4.8时,它工作正常。这似乎是一个编译器错误。(感谢grizzly)@user1487087:您能发布您的全部代码吗?(如果它足够小。)并且请包括包含的标题和其他预处理器指令。@user1487087,再现问题的最小完整示例就是我们所喜欢的。请参阅。@user1487087:发布的代码在gcc4.6中工作得非常好,所以问题一定在别处。@user1487087:您的完整代码工作得很好。您使用的编译器是什么?我不这么认为这里的问题是,但是您没有在while循环之外定义返回值。如果您以某种方式超出了while循环,则不会返回值(尽管我不知道预期的行为是什么,或者在这种情况下是否预期任何行为)。GCC确实警告了这一点。但是,我不知道它将如何退出。
grid[3][3] = updateGrid(grid, move, playersMove);
int grid[3][3] = {{1,2,3},{4,5,6},{7,8,9}};