gpt4 book ai didi

CS50 复数无法编译

转载 作者:行者123 更新时间:2023-11-30 19:24:52 25 4
gpt4 key购买 nike

我总是在本地计算机上处​​理 Pset,并将 string 替换为 char *,因此我不必在头文件中使用 CS50 库。这是我对为什么我的代码在运行 check50

时无法编译的唯一解释

代码在我的机器以及 CS50 IDE 中按预期工作,但 check50 仍然给我这个错误:

code failed to compile
Log
running clang plurality.c -o plurality -std=c11 -ggdb -lm -lcs50...
running clang plurality_test.c -o plurality_test -std=c11 -ggdb -lm -lcs50...
plurality_test.c:68:1: warning: control may reach end of non-void function
[-Wreturn-type]
}
^
plurality_test.c:109:20: error: unknown type name 'string'
int main(int argc, string argv[])
^
1 warning and 1 error generated.

复数.c

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

// Max number of candidates
#define MAX 9

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

// Array of candidates
candidate candidates[MAX];

// Number of candidates
int candidate_count;

// Function prototypes
bool vote(char name[]);
void print_winner(void);
int search(char name[]);

int main(int argc, char *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;
printf("Number of voters: ");
scanf("%i", &voter_count);

// Loop over all voters
for (int i = 0; i < voter_count; i++)
{
char name[10];
printf("Vote: ");
scanf("%s", name);

// 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(char name[])
{
for (int i = 0; i < candidate_count; i++)
{
if (strcmp(candidates[i].name, name) == 0)
{
candidates[i].votes++;
return true;
}
}

return false;
}

// Print the winner (or winners) of the election
void print_winner(void)
{
int prev = -1;
int curr;
int id;

for (int i = 0; i < candidate_count + 1; i++)
{
curr = candidates[i].votes;

if (curr > prev)
{
id = i;
prev = candidates[id].votes;
}
}

printf("%s\n", candidates[id].name);
return;
}

最佳答案

@Blauelf 回答了这个问题:

检查代码重命名您的 main函数并附加自己的函数。

该警告存在的原因是 main是唯一返回非 void 的函数如果您不显式返回值(默认情况下返回 0),则返回值仍然被定义。对于其他函数,返回值由编译器决定,通常取决于 CPU 架构。通过重命名该函数,此特殊属性不再适用。不是问题,因为这只是一个警告,并且该函数永远不会被调用。

然后他们附加自己的 main函数,这就是错误发生的地方:那个期望你 #include <cs50.h> 。即使您自己不使用其功能,也请确保在提交时添加此行。

关于CS50 复数无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59771714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com