私は、約1か月の情報を保持する単純な構造から、うるう年以外の同じ情報の12の構造の配列に徐々に成長するプログラムを作成しました。ここで、「月番号を指定すると、その月を含むまでの1年の合計日数を返す関数を含めようとしています。質問3の構造テンプレートとそのような構造の適切な配列が宣言されていると仮定します。外部的に。」
runを押すと、2つのエラーが発生しますが、どちらもわかりません。アーキテクチャx86_64の未定義のシンボル: "_ months"、参照元:_days in main.o ld:アーキテクチャ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);
}
}