0

在为我的计算机科学课做一个项目时,我遇到了数组的问题。基本上,我必须从用户那里获取他们想要输入数据的年数。然后我必须使用该输入来创建两个数组(一个用于他们想要数据的实际年份,一个用于数据本身)。然后我必须打印出用户刚刚输入的年份和数据。

问题是,当我这样做时,年份的数据打印得很好,但年份本身会打印为随机内存地址。另一个奇怪的事情是,这只发生在我做三年或更长时间的时候。当我做两个或更少时,其他一切都很好。年份的变量是 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 回答