gpt4 book ai didi

c - 为什么我的 C 程序使用一个函数来计算一年中的月份总数会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:21 25 4
gpt4 key购买 nike

我编写了一个程序,该程序从一个包含一个月左右信息的简单结构逐渐发展为包含 12 个非闰年相同信息结构的数组。现在,我试图包含一个函数,“当给定月份数时,返回一年中的总天数,直到包括那个月。假设问题 3 的结构模板和此类结构的适当数组已声明外部。”

当我按下运行时,出现两个错误,我都不理解。他们来了:“体系结构 x86_64 的 undefined symbol : “_months”,引用自: main.o 中的_daysld: 找不到体系结构 x86_64 的符号clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”

非常感谢任何帮助,谢谢。

#include <stdio.h>
int days(int monthnum);
struct month {
char name[10];
char abbreviaton[4];
int days;
int monthnum;
};
int main(void)
{

struct month months[12] = {
{"January", "Jan", 31, 1},
{"February", "Feb", 28, 2},
{"March", "Mar", 31, 3},
{"April", "Apr", 30, 4},
{"May", "May", 31, 5},
{"June", "Jun", 30, 6},
{"July", "Jul", 31, 7},
{"August", "Aug", 31, 8},
{"September", "Sep", 30, 9},
{"October", "Oct", 31, 10},
{"November", "Nov", 30, 11},
{"December", "Dec", 31, 12},
};

struct month *sign;

sign = &months[12];

days(months[12].monthnum);

return 0;
}
extern struct month months[12];
int days(int monthnum)
{
int index, total;

if (monthnum < 1 || monthnum > 12)
return(-1);
else
{
for (index = 0, total = 0; index < monthnum; index++)
total += months[index].days;
return(total);
}
}

这是我现在的代码。该程序有效:

#include <stdio.h>
int days(int monthnum);
struct month {
char name[10];
char abbreviaton[4];
int days;
int monthnum;
};
struct month months[12] = {
{"January", "Jan", 31, 1},
{"February", "Feb", 28, 2},
{"March", "Mar", 31, 3},
{"April", "Apr", 30, 4},
{"May", "May", 31, 5},
{"June", "Jun", 30, 6},
{"July", "Jul", 31, 7},
{"August", "Aug", 31, 8},
{"September", "Sep", 30, 9},
{"October", "Oct", 31, 10},
{"November", "Nov", 30, 11},
{"December", "Dec", 31, 12},
};
int main(void)
{
int value;
int count = 0;
struct month *sign;

sign = &months;

printf("Enter month number: ");

scanf("%d", &months[count].monthnum);

value = days(sign->monthnum);

printf("%d", value);

return 0;
}
extern struct month months[];
int days(int monthnum)
{
int index, total;

if (monthnum < 1 || monthnum > 12)
return(-1);
else
{
for (index = 0, total = 0; index < monthnum; index++)
total += months[index].days;
return(total);
}
}

最佳答案

眼前的问题是由于这一行;

extern struct month months[12];

这里没有引用数组定义; months 是在 main 中声明的,没有其他地方。摆脱那条线。

接下来你有逻辑问题:

days(months[12].monthnum);

你已经超出了数组的边界。数组是 0 索引的,即十二个元素的数组包含有效索引 0-11。 12 太远了。

顺便说一句,当您显式初始化每个元素时,您不需要指定数组的维数。只需使用:

struct month months[] = {
{"January", "Jan", 31, 1},
{"February", "Feb", 28, 2},
{"March", "Mar", 31, 3},
{"April", "Apr", 30, 4},
{"May", "May", 31, 5},
{"June", "Jun", 30, 6},
{"July", "Jul", 31, 7},
{"August", "Aug", 31, 8},
{"September", "Sep", 30, 9},
{"October", "Oct", 31, 10},
{"November", "Nov", 30, 11},
{"December", "Dec", 31, 12},
};

编译器知道有十二个元素,因为你这样告诉它。现在,当/如果您添加或删除元素时,您不必更改维度。

下一个问题;可变范围。您在 days 函数中有这个:

total += months[index].days;

嗯,days 无法访问 months,因为 monthsmain 的局部变量。您需要研究和理解变量作用域。

关于c - 为什么我的 C 程序使用一个函数来计算一年中的月份总数会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630135/

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