Для чего нужны возвращаемые значения 2, 3 и 4?

Кто может сказать мне, что именно делает return 2 в этом фрагменте кода и почему он там? Как насчет возврата 3 и возврата 4?

Код, который вы видите, это еще не все, и в основном это упражнение для курса cs50, где они предлагают метод выбора второго тура.

Спасибо!!

#include <cs50.h>
#include <stdio.h>

int main(int argc, string argv[])
{
    // Check for invalid usage
    if (argc < 2)
    {
        printf("Usage: runoff [candidate ...]\n");
        return 1;
    }

    // Populate array of candidates
    candidate_count = argc - 1;
    if (candidate_count > MAX_CANDIDATES)
    {
        printf("Maximum number of candidates is %i\n", MAX_CANDIDATES);
        return 2;
    }

    for (int i = 0; i < candidate_count; i++)
    {
        candidates[i].name = argv[i + 1];
        candidates[i].votes = 0;
        candidates[i].eliminated = false;
    }

    voter_count = get_int("Number of voters: ");
    if (voter_count > MAX_VOTERS)
    {
        printf("Maximum number of voters is %i\n", MAX_VOTERS);
        return 3;
    }

    // Keep querying for votes
    for (int i = 0; i < voter_count; i++)
    {

        // Query for each rank
        for (int j = 0; j < candidate_count; j++)
        {
            string name = get_string("Rank %i: ", j + 1);

            // Record vote, unless it's invalid
            if (!vote(i, j, name))
            {
                printf("Invalid vote.\n");
                return 4;
            }
        }
        printf("\n");
    }

person program101    schedule 19.04.2020    source источник
comment
Не совсем понятно, о чем ваш вопрос, но, надеюсь, вышеприведенный пост ответит на него. Если нет, найдите основное возвращаемое значение и прочитайте множество результатов. И если это все еще не помогает, пожалуйста, уточните, что вы спрашиваете.   -  person kaylum    schedule 19.04.2020
comment
не совсем потому, что код продолжается с возвратом 3 и возвратом 4....   -  person program101    schedule 20.04.2020
comment
Итак, вы спрашиваете, почему именно 2? Программист только что сделал это так, что 2 означает превышение максимального количества кандидатов. Это не высечено в камне. Это может быть 3, 4 или 100. При условии, что тот, кто использует это значение, знает, что оно означает. И они знают это по документации - если вы используете мой код, я сказал вам, что 2 означает это.   -  person kaylum    schedule 20.04.2020
comment
Я разместил остальную часть кода с возвратом 3 и возвратом 4. Не совсем понятно (для меня), что они делают.   -  person program101    schedule 20.04.2020
comment
Рассмотрим этот вариант. Почему вы останавливаетесь на светофоре, когда горит красный? красный не должен означать стоп. Холодно идти. Но мы все согласились, что красный означает стоп. То же самое с 2, 3, 4 в этой программе. Программист и пользователь кода соглашаются понять, что означает каждое из этих значений — в этом случае каждое из них сообщает об определенном состоянии ошибки.   -  person kaylum    schedule 20.04.2020


Ответы (1)


Это возвращаемое значение функции main(), как вы видите, main() возвращает int, поэтому можно использовать любое значение в диапазоне int, включая, конечно, 2, 3 или 4. Обычные возвращаемые значения обычно равны 1 для ошибки и 0 для успеха, но лучше использовать макросы EXIT_FAILURE и EXIT_SUCCESS из стандартной библиотеки <stdlib.h> для более переносимого кода.

Вы можете рассматривать это как коды выхода программы, с кодом, который вы показываете, неясно, делает ли система что-либо с ними.

В контексте программы они представляют различные типы причин выхода программы, например, 1 — это когда количество аргументов командной строки отличается от требуемого, 2 — это код выхода, когда candidate_count больше, чем MAX_CANDIDATES, 3 будет значением выхода, когда voter_count больше, чем MAX_VALUES, и так далее.

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

person anastaciu    schedule 19.04.2020
comment
Для переносимости следует использовать EXIT_FAILURE, а не 1. Диапазон int не находится в пределах от −2 147483648 до 2 147483647 во всех реализациях C. Это неправильный вывод, что, поскольку возвращаемый тип функции — int, любое значение int является допустимым возвращаемым значением для этой функции. - person Eric Postpischil; 20.04.2020
comment
@EricPostpischil, как всегда правильно. - person anastaciu; 20.04.2020
comment
извините, но это не ответ на вопрос - person program101; 20.04.2020
comment
@program101, я добавил объяснение к своему ответу, надеюсь, это то, что вы ищете. - person anastaciu; 20.04.2020