2013-03-06 50 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聲明,因爲它是。