2013-03-06 54 views
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年那样保持最后一年,不管出于何种原因,如果这有帮助的话。

+1

你能告诉我们'dataforyear'和'printf'语句的初始化吗? – RageD 2013-03-06 04:43:11

+0

是的,我们还需要查看printf代码(特别是如何初始化阵列) – 2013-03-06 04:47:20

+0

已更新为包含。 – Brady 2013-03-06 04:50:53

回答

1

这些行:

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

可能是问题。编译器需要在编译时知道数组的大小。否则,你将不得不为阵列分配内存。如果您的程序不需要读取大量数据,则可以通过指定其大小来避免分配内存。

int years[10]; 
double dataforyear[10]; 
+0

如果这是问题,它不会编译。 – 2013-03-06 04:59:20

+0

@luserdroog我想这可能是真的..我真的没有看到任何其他问题的代码发布。嗯 – 2013-03-06 05:01:17

+0

其实,我把这两个数组设置为[100],它似乎解决了这个问题。非常感谢你! – Brady 2013-03-06 05:06:11

2

你是怎么声明你的dataforyear[]数组的?
如果是float dataforyear[]然后改变你的scanf声明
scanf("%d %f",&years[a],&dataforyear[a]);

其他声明你的阵列double dataforyear[],如果你想保持你的scanf声明,因为它是。