C语言 在此代码中何时以及如何调用bool?

oyxsuwqo  于 2022-12-03  发布在  其他
关注(0)|答案(4)|浏览(139)

我一直在努力学习CS50,只是为了学习编程的基础知识。我成功地做了习题集3的复数运算,但我并不真正理解布尔运算是如何工作的。所以具体的问题是:
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;
}
xmakbtuz

xmakbtuz1#

在这段代码中如何调用bool?
这里您对术语有一些严重的误解。问“bool是如何被调用的”没有任何意义。让我为您澄清一些问题:

  1. bool是我们所说的“数据类型”。其他数据类型是intchar。它们定义了内存中值的含义。例如,int是正整数和负整数,char是字母和符号,bool是真或假。
    1.函数是我们“调用”的东西。更具体地说,函数是执行特定任务的一段代码。我们“调用”函数是为了让它执行该任务。这就是为什么问“什么时候调用bool”没有意义。我们从不“调用bool”,因为bool是数据类型而不是函数。
    1.当我们声明一个函数时,我们必须提供3条信息:函数名、输入列表(或者更准确地说是每个输入的类型)以及函数结果的类型(称为“返回类型”)。当你写bool vote(string name);时,它声明了一个名为vote的函数,该函数将string作为输入,并返回bool
    混淆可能是因为我们使用bool作为函数定义的一部分。在上面的例子中,我们只是说调用vote()函数的结果是true或false。
    考虑到这些,我们可以讨论vote()函数何时被调用。要弄清楚,您只需查看代码中所有出现的单词vote。如果这样做,您将发现一行if (!vote(name))。这就是vote()被调用的地方。换句话说,我们告诉计算机执行vote()函数中的代码,它返回一个true或false值,用于计算if语句的条件。
    当你继续学习编程时,一定要密切注意术语。像许多其他学科一样,我们有自己的词汇。为了与其他程序员交流,你需要使用正确的词汇。更重要的是,理解我们使用的词汇将帮助你更清楚地理解概念,以便你自己应用它们。
dbf7pr2w

dbf7pr2w2#

bool是一个type,用于创建一个 boolean 变量,即一个足以进行true/false求值的变量。因此,因为bool不是一个函数,所以它不会被 * 调用 *。
原型:bool vote(string name);表示函数vote()接受string变量作为参数,并返回bool * 值 *(truefalse),其中bool类型返回的值只能是10。(TRUEFALSEbool的这个属性使得if (!vote(name)){...}语句成为可能。这个构造使用一个公共的 shortcut 语法来调用函数,计算返回值并决定执行流,所有这些都在一行中完成。
也可以使用更详细的语法编写此代码:

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变量 result 被赋值为函数vote()的返回值。这也意味着,如果vote()的返回值是true,则比较语句(result == false)将失败,并绕过失败消息。

e4eetjau

e4eetjau3#

在// Update vote totals中,给定一个新的投票,你应该写i〈voter_count而不是i〈candidate_count,因为如果你有3个候选人和100个投票人,你只会考虑前3个投票人,其他97个不会被考虑。所以正确的代码是与voter count而不是candidate count进行比较。谢谢。

qvsjd97n

qvsjd97n4#

现在对此进行评论可能有点晚了(并且可能与您的问题有点不相关),但是我编写了与您相同的代码,并且遇到了一个问题。
因此,根据这个代码,得票最高的候选人的名字有时会打印两次。
我认为这是因为如果候选人[i]的票数高于候选人[0],我们就给予候选人[0]以候选人[i]的值,但候选人[i]的值保持不变。例如,如果我们有3个候选人(A、B、C),其投票为在运行print_赢家函数的前半部分之后,我们的结果变为C(3票),B(1票),C(3票)。然后打印出“C”,因为它是候选人[0]的名字。然后运行print_赢家函数的剩余部分,再次打印出“C”,因为它是与候选人[0]得票相同的候选人[2]的名字。
如果我在这一点上错了,请纠正我。我也只是一个编码初学者:)。

相关问题