我正在开发一个程序,当用户输入月份编号和日期编号时,程序将打印出月份和天数(年初至今)。例如,如果用户输入12 30,程序将打印12月(DEC)30表示年初至今364天。该计划不需要担心闰年。我已经发布了以下代码。我的程序不起作用,我不知道为什么。我认为我的问题是试图从结构月月中提取月份数和名称,但我不确定。我正在使用MSVS,当我尝试使用调试器时,我收到有关错误的警告,并被告知“为最后一次成功构建运行”(没有一个)。
我收到以下错误:
左边的'.abbrev'/'。months'/'。monumb'必须在第55,57,58行上有class / struct / union
#include <stdio.h>
#include <string.h>
int finddata(int month, int days);
struct month
{
char name[10];
char abbrev[4];
int days;
int monumb;
};
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()
{
struct month userdata;
do
{
printf("Enter month and day number:");
scanf_s("%d %d", &userdata.monumb, &userdata.days);
finddata(userdata.monumb, userdata.days);
} while ((userdata.monumb > 0) && (userdata.monumb < 13));
return 0;
}
int finddata(int months, int days)
{
int i;
int total = 0;
for (i = 1; i != month.monumb[i]; i++) //**(line 55)**
{
puts(month.name[i]); //**(line 57)**
puts(month.abbrev[i]); //**(line 58)**
}
printf("%d means", months);
if (months == 1)
{
total = days;
}
else if (months == 2)
{
total = days + 31;
}
else if (months == 3)
{
total = 31 + 28 + days;
}
else if (months == 4)
{
total = 31 + 28 + 31 + days;
}
else if (months == 5)
{
total = 31 + 28 + 31 + 30 + days;
}
else if (months == 6)
{
total = 31 + 28 + 31 + 30 + 31 + days;
}
else if (months == 7)
{
total = (31 * 3) + 28 + (30 * 2) + days;
}
else if (months == 8)
{
total = (31 * 4) + 28 + (30 * 2) + days;
}
else if (months == 9)
{
total = (31 * 5) + 28 + (30 * 2) + days;
}
else if (months == 10)
{
total = (31 * 5) + 28 + (30 * 3) + days;
}
else if (months == 11)
{
total = (31 * 6) + 28 + (30 * 3) + days;
}
else if (months == 12)
{
total = (31 * 6) + 28 + (30 * 4) + days;
}
else
{
//blank
}
printf("%d days YTD.", total);
return 0;
}
答案 0 :(得分:0)
此循环中有几个错误:
for (i = 1; i != month.monumb[i]; i++) //**(line 55)**
{
puts(month.name[i]); //**(line 57)**
puts(month.abbrev[i]); //**(line 58)**
}
struct month
数组命名为months
,但将其称为month
。要匹配名称,请将定义更改为struct month month[12] =
。month[…].…
。months
数组元素的循环条件是错误的,并且根本不需要循环,因为数组已排序。要纠正第2点和第3点,请将整个循环替换为:
puts(month[months-1].name);
puts(month[months-1].abbrev);
答案 1 :(得分:-2)
finddata中的for循环将month.monumb视为一个数组,当它是一个整数时。请使用更好的名字。我怀疑你不清楚一系列结构是如何工作的。
因此,您不需要for循环来查找月份名称。你可以只索引数组;
puts(months.name[userdata.monumb]); //**(line 57)**
puts(months.abbrev[userdata.monumb]); //**(line 58)**