c++ - 返回 0、1、-1 时需要澄清(不在主目录中)
问题描述
我是 C++ 的初学者(或一般的所有编码)。话虽如此,我试图了解 return 0/return 1/return -1 在 main() 函数之外定义的内容。
我对返回值的了解是它允许一个人结束一个语句并获得一个“返回”整数值。(我的教授)告诉我 return 0 就像是“已达到”的状态。告诉用户一切正常。
然而让我困惑的是下面的代码。在“int checkwin()”函数中,它声明如果玩家获胜,那么代码将输入“return 1”。如果没有人获胜,则“返回 0”。最后一个我不完全理解(假设它意味着继续),因为我还没有弄清楚return 0/1/-1的定义。
#include <iostream>
using namespace std;
char square[10] {'0','1','2','3','4','5','6','7','8','9'};
int checkwin();
void board();
int main()
{ // main function OPEN
int player;
int i;
int choice;
char mark;
do { // do while loop open
board();
player=(player%2)?1:2;
cout << "Player " << player << ", enter a number: ";
cin >> choice;
mark =(player ==1) ? 'X' : 'O';
if(choice==1 && square[1]=='1')
square[1] = mark;
else if(choice==2 && square[2]=='2')
square[2] = mark;
else if(choice==3 && square[3]=='3')
square[3] = mark;
else if(choice==4 && square[4]=='4')
square[4] = mark;
else if(choice==5 && square[5]=='5')
square[5] = mark;
else if(choice==6 && square[6]=='6')
else if(choice==7 && square[7]=='7')
square[7] = mark;
else if(choice==8 && square[8]=='8')
square[8] = mark;
else if(choice==9 && square[9]=='9')
square[9] = mark;
else
{ // else statment OPEN
cout << "That is an invalid choice" <<endl;
player--;
cin.ignore();
cin.get();
} // else statement CLOSED
i=checkwin();
player ++;
} // do while loop CLOSED
while (i==-1);
board();
if(i==1)
cout << "==> Player " << --player << "win";
else
cout << "==> Game Draw" ;
cin.ignore();
cin.get();
return 0;
} // main function CLOSED
//****************************************************************
//**********************checkwin function *************************
//*****************************************************************
int checkwin()
{ // checkwin function bracket OPEN
if(square[1] == square[2] && square[2] == square[3])
return 1;
else if(square[4] == square[5] && square[5] == square [6] )
return 1;
else if(square[7] == square[8] && square[8] == square [9] )
return 1;
else if(square[1] == square[4] && square[4] == square[7])
return 1;
else if(square[2] == square[5] && square[5] == square[8])
return 1;
else if(square[3] == square[6] && square[6] == square[9])
return 1;
else if(square[1] == square[5] && square[5] == square[9])
return 1;
else if(square[3] == square[5] && square[5] == square[7])
return 1;
else if(square[1] != '1' && square[2] != '2' && square[3] != '3' && square[4] != '4'
&& square[5] != '5' && square[6] != '6' && square[7] != '7' && square[8] != '8'
&& square[9] != '9' )
return 0;
else
return -1;
} // checkwin function bracekt CLOSED
//*******************************************************************
//************************ board function ***************************
//*******************************************************************
void board()
{ // board function bracket OPEN
system("cls");
cout <<"\n\nTic Tac Toe\n\n";
cout<< "Player 1 ( X ) - Player 2 ( O )\n\n\n" ;
cout<< " | | " << endl;
cout<< " " << square[1] << " | " << square[2] << " | " << square[3] << endl;
cout<< "_____|_____|_____" << endl;
cout<< " | | " << endl;
cout<< " " << square[4] << " | " << square[5] << " | " << square[6] << endl;
cout<< "_____|_____|_____" << endl;
cout<< " | | " << endl;
cout<< " " << square[7] << " | " << square[8] << " | " << square[9] << endl;
cout<< " | | " << endl;
} // board function bracket CLOSED
对不起,如果我的问题有点混乱或者我不够清楚。
解决方案
-1
incheckwin
表示并非所有棋盘区域都已填满,目前没有人获胜,因此游戏尚未结束
1) 在初始位置,任何 square[i] !=X
或O
char square[10] {'0','1','2','3','4','5','6','7','8','9'};
或者,等效地,
square[0] = '0'; // dummy value -- not used at all
square[1] = '1';
square[2] = '2';
square[3] = '3';
square[4] = '4';
square[5] = '5';
square[6] = '6';
square[7] = '7';
square[8] = '8';
square[9] = '9';
2)他们把火星放在船上mark =(player ==1) ? 'X' : 'O';
3)游戏继续,而游戏状态为-1:
do { // do while loop open
...
i=checkwin();
...
} while (i == -1)
-1
表示并非所有棋盘区域都已填满,目前没有人获胜,因此游戏尚未结束