需要澄清返回值0、1,-1(不在主目录中)

时间:2019-02-24 23:49:03

标签: c++ return return-value

我是C ++的初学者(或所有通用编码)。 话虽如此,我试图理解在main()函数之外定义了什么return 0 / return 1 / return -1。

我对返回值的了解是,它允许一个语句结束并获得“返回”整数值。 我的教授告诉我,返回0就像是“实现”状态。告诉用户一切正常。

但是让我感到困惑的是下面的代码。在“ int checkwin()”函数中,它指出如果玩家获胜,则代码将输入“ return 1”。如果没有人获胜,则“返回0”。最后一个我不完全理解(假设这意味着继续前进),因为同样,我还没有弄清楚返回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

对不起,如果我的问题有点令人困惑或不清楚。

3 个答案:

答案 0 :(得分:0)

该值表示函数作者希望它表示的含义。就这么简单。

有人写了checkwin,那个人决定在这些条件下返回那些值。这样,使用该功能的人员就可以期望能够根据那些潜规则来解释该功能的结果。

我可以编写一个函数urgleburgle,当天空为蓝色时返回数字42,当天空为红色时返回数字98。当天空为其他颜色时,它将返回数字11111。作为我的职能用户,您将只需要接受这一选择。没有更深层的意义。

该函数的作者应该添加文档注释,以解释每个可能的返回值的含义,以便您可以理解该函数并将其实际用于有意义的东西。

在您的特定情况下,它看起来 -1的意思是“尚无游戏结果;请继续”,尽管由于没有使用说明,我们可以只猜。您应该请作者(例如您的教授)为该功能阐明他们打算将每个返回值表示什么。

main有点特殊,因为它的用户是操作系统(过度简化警告!),因此必须有一个关于其返回值含义的预定义规则,即操作系统系统可以理解。尽管存在各种其他特定于平台的约定,但对于成功通常为0,对于失败通常为1。

答案 1 :(得分:0)

函数的返回值是与用户签订的合同的一部分。从函数的文档中应该清楚每个返回值的含义。

通常,在基于UNIX的系统中,从程序主程序返回0表示成功执行。但是,内部函数可以并且通常不遵循此约定。

在此代码中,返回-1表示游戏尚未完成(继续执行do-while循环)。返回1表示游戏结束并且有获胜。同时,返回0表示游戏以平局结束。

答案 2 :(得分:0)

-1中的checkwin意味着并不是所有的棋盘区域都已填充,并且目前没有人获胜,因此游戏尚未结束

1)在初始位置,任何正方形[i]!= XO

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意味着并非所有的棋盘区域都已填写,并且目前没有人获胜,因此游戏尚未结束

相关问题