0

コンピュータサイエンスの授業でプロジェクトを行っているときに、配列に問題が発生しました。基本的には、ユーザーがデータを入力したい年数の間、ユーザーからの入力を取得する必要があります。次に、その入力を使用して2つの配列を作成する必要があります(1つはデータが必要な実際の年用で、もう1つはデータ自体用です)。次に、ユーザーが入力した年とデータを印刷する必要があります。

問題は、これを行うと、年のデータは正常に出力されますが、年自体はランダムなメモリアドレスとして出力されることです。もう一つの悩みの種は、これは私が3年以上行ったときにのみ起こるということです。私が2つ以下をするとき、他のすべては大丈夫です。年の変数はintであり、データの変数はdoubleです。

int numberofyears;
printf("Enter the number of years you wish to take data for: " );
scanf("%d",&numberofyears); //take input for how many times arrays run

int years[numberofyears];
double dataforyear[numberofyears];

int a;
printf("Enter the years and their respective data");
for (a=0;a<numberofyears;a++){
   scanf("%d %lf",&years[a],&dataforyear[a]);} //take inputs for both arrays

int b;
for (b=0;b<numberofyears;b++){
   printf("%d %.2lf\n",years[b],dataforyear[b]);} 

入力:

Enter the number of of years you wish to take data for: 5
Enter the years and their respective data
1950 200.96
2000 300.55

プリントアウト:

1950 200.96
2000 300.55 

入力:

Enter the number of of years you wish to take data for: 5
Enter the years and their respective data
1956 325.21
1989 386.22
2003 400.00

プリントアウト:

0 325.21
1081671680 386.22
2003 400.00

そして、3年を超える他のものはこれを行います。5年を超えるものは、何らかの理由で3のように昨年を維持しないように見えますが、それが役立つ場合は。

4

2 に答える 2

2

dataforyear[]配列をどのように宣言しましたか?
その場合はfloat dataforyear[]、scanf ステートメントを次のように変更します。
scanf("%d %f",&years[a],&dataforyear[a]);

そうでなければ、ステートメントをそのままdouble dataforyear[]保持したい場合は、配列を宣言します。scanf

于 2013-03-06T05:00:34.940 に答える
1

これらの行:

int years[numberofyears];
double dataforyear[numberofyears];

問題かもしれません。コンパイラは、コンパイル時に配列のサイズを知る必要があります。それ以外の場合は、配列にメモリを割り当てる必要があります。プログラムが大量のデータを読み取ることが想定されていない場合は、サイズを指定することで常にメモリの割り当てを回避できます。

int years[10];
double dataforyear[10];
于 2013-03-06T04:58:05.583 に答える