Требуется уточнение по возврату 0, 1, -1 (не в основном) - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в C ++ (или во всем кодировании в целом).При этом я пытаюсь понять, что определяет return 0 / return 1 / return -1 вне функции main ().

Что я знаю о возвращаемых значениях, так это то, что он позволяет завершить оператори получить "возврат" целочисленного значения.Мне сказали (мой профессор), что возвращение 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 голосов
/ 25 февраля 2019

Возвращаемое значение функции является частью ее договора с пользователем.Из документации функции должно быть ясно, что означает каждое возвращаемое значение.

Обычно в системах на основе Unix возврат 0 из основной части программы указывает на успешное выполнение.Однако внутренняя функция может и, как правило, не следует этому соглашению.

В этом коде возврат -1 означает, что игра еще не завершилась (продолжайте выполнение цикла do-while).Возвращение 1 означает, что игра закончилась, и есть победа.Возвращение 0 означает, что игра завершилась вничью.

0 голосов
/ 25 февраля 2019

-1 в checkwin означает, что не все поля доски заполнены и никто не выигрывает в данный момент, поэтому игра еще не закончена

1) в начальной позиции, на любом поле [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 означает, что не все поля на доске заполнены и никто не выигрывает в данный момент, поэтому игра еще не закончена

0 голосов
/ 25 февраля 2019

Значение означает то, что автор функции хочет, чтобы оно значило.Это так просто.

Кто-то написал checkwin, и этот человек решил, что при таких условиях он вернет эти значения.Люди, использующие функцию, могут ожидать, что смогут интерпретировать результат функции в соответствии с этими невысказанными правилами.

Я могу написать функцию urgleburgle, которая возвращает число 42, когда небо синее, и число 98когда небо красное.Возвращает число 11111, когда небо другого цвета.И вы, как пользователь моей функции, просто должны будете принять этот выбор.Нет более глубокого значения.

Автор функции должен добавить документирующие комментарии, объясняющие, что означает каждое возможное возвращаемое значение, чтобы вы могли понять функцию и фактически использовать ее для осмысленных вещей.

В вашем конкретном случае это выглядит так: -1 предназначено для обозначения «пока нет результатов игры; продолжайте», хотя, так как комментариев нет, мымогу только догадываться.Вы должны попросить автора (например, вашего профессора) уточнить, для чего они предназначены для каждого возвращаемого значения, для этой функции.

main немного особенный, потому что его пользователь - операционная система ( упрощение)предупреждение! ), поэтому должно быть предопределенное правило о том, что означают его возвращаемые значения, которое может понять операционная система.Это часто 0 для успеха и 1 для неудачи, хотя существуют различные другие соглашения, специфичные для платформы.

...