Когда и как в этом коде вызывается bool? - PullRequest
0 голосов
/ 30 мая 2020

Я прошел через CS50 только для того, чтобы изучить основы кодирования. Я успешно создал множество задач 3, но я не совсем понимаю, как работает логическое значение. Итак, специфические c вопросы:

1) Как работает структура логического значения? 2) Когда и как он вызывается?

Я пытаюсь понять фундаментальный аспект использования этого. Спасибо за любую помощь.

Вот код:

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

// Max number of candidates
#define MAX 9

// Candidates have name and vote count
typedef struct
{
    string name;
    int votes;
}
candidate;

// Array of candidates
candidate candidates[MAX];

// Number of candidates
int candidate_count;

// Function prototypes
bool vote(string name);
void print_winner(void);

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

    // Populate array of candidates
    candidate_count = argc - 1;
    if (candidate_count > MAX)
    {
        printf("Maximum number of candidates is %i\n", MAX);
        return 2;
    }
    for (int i = 0; i < candidate_count; i++)
    {
        candidates[i].name = argv[i + 1];
        candidates[i].votes = 0;
    }

    int voter_count = get_int("Number of voters: ");

    // Loop over all voters
    for (int i = 0; i < voter_count; i++)
    {
        string name = get_string("Vote: ");

        // Check for invalid vote
        if (!vote(name))
        {
            printf("Invalid vote.\n");
        }
    }

    // Display winner of election
    print_winner();
}

// Update vote totals given a new vote
bool vote(string name)
{
   // TODO
   for (int i = 0; i < candidate_count; i++)
   {
       if (strcmp (name, candidates[i].name) == 0)
       {
           candidates[i].votes++;
           return true;
       }
   }
    return false;
}

// Print the winner (or winners) of the election
void print_winner(void)
{
    // TODO
    for (int i = 1; i < candidate_count; i++)
    {
        if (candidates[0].votes < candidates[i].votes)
        candidates[0].votes = candidates[i].votes;
    }
    printf ("%s\n", candidates[0].name);
    for (int i = 1; i < candidate_count; i++)
    {
        if (candidates[0].votes == candidates[i].votes)
        printf ("%s\n", candidates[i].name);
    }
    return;
}

Ответы [ 2 ]

6 голосов
/ 30 мая 2020

как в этом коде вызывается bool?

У вас здесь существенное недопонимание терминологии. Спрашивать «как вызывается bool» не имеет смысла. Позвольте мне кое-что прояснить для вас:

  1. bool - это то, что мы называем «типом данных». Другие типы данных: int и char. Они определяют значение значения в памяти. Например, int - положительные и отрицательные целые числа, char - буквы и символы, а bool - истинное или ложное.

  2. Функции - это то, что мы «называем» . Более конкретно, функция - это часть кода для выполнения определенной c задачи. Мы «вызываем» функцию, чтобы она выполнила эту задачу. Вот почему нет смысла спрашивать, «когда вызывается bool». Мы никогда не вызываем bool, потому что bool - это тип данных, а не функция.

  3. Когда мы объявляем функцию, мы должны предоставить 3 части информации: имя функции, список входов (или, точнее, типы каждого из входов) и тип результата функции (называемый «типом возврата»). Когда вы пишете bool vote(string name);, это объявляет функцию с именем vote, которая принимает string в качестве входных данных и возвращает bool.

    Путаница может быть из-за того, что мы используем bool как часть определение функции. В приведенном выше примере мы просто говорим, что результатом вызова функции vote() является либо истина, либо ложь.

Имея все это в виду, мы можем говорить о том, когда vote() вызывается функция. Чтобы понять это, вы просто просматриваете код, чтобы найти все вхождения слова vote. Если вы это сделаете, вы найдете строку if (!vote(name)). Здесь вызывается vote(). Другими словами, мы говорим компьютеру выполнить код в функции vote(), и он возвращает истинное или ложное значение, которое используется для оценки условия оператора if.

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

2 голосов
/ 30 мая 2020

bool - это type, используемое для создания логической переменной, то есть такой, которая будет достаточной для true/false оценок. Итак, поскольку bool не функция, она не получает вызывается .

Прототип: bool vote(string name); указывает, что функция vote() принимает переменную string в качестве аргумента, и возвращает bool значение (true или false) по возвращении, где значение, возвращаемое типом bool, может быть только 1 или 0. (TRUE или FALSE) Это свойство bool делает возможным утверждение if (!vote(name)){...}. Эта конструкция использует общий синтаксис ярлык для вызова функции, оценки возвращаемого значения и принятия решения о потоке выполнения в одной строке.

Это также могло быть написано с использованием более подробного синтаксиса:

bool result = false; //'result' is created and initialized to false

result = vote(name);//function vote() is called, and assigns its return value to result.
if(result == false)
{
     printf("Invalid vote.\n");
}  

, где bool переменной результат присваивается возвращаемое значение функции vote(). Подразумевается также, что если возвращаемое значение vote() было true, тогда оператор сравнения (result == false) завершился бы ошибкой и пропустил бы сообщение об ошибке.

...