2012-06-05 35 views
2

我是多維數組的新手,我現在正在努力解決的問題如下:我有一個「maxn」數天,以及這幾天記錄的最高和最低溫度,我必須用這些數據做某些事情。其中一件事是確定溫度低於和高於0的日子(即:最低記錄溫度低於最高溫度)。該程序必須輸出發生此類事件的天數以及這些天的索引。但是,無論我使用哪個循環以及如何,我都會搞砸它,要麼我得到一些絕對不相關的東西或無限循環。這是我到目前爲止:C++:使數組滿足一定要求的二維數組的元素

void abovebelow (int n, float days[maxn][2]{ 

int counter=0; 
float a[maxn]; 

for (int i=0; i<n; i++){ 
    for (int j=0; j<n; j++){ 
      if ((days[i][0]<0 && days[i][1]>0) || (days[i][1]<0 && days[i][0]>0)){ 
      counter++; 
      i=a[j]; 
     cout<<counter<<" "<<a[j]<<" "; 
    } 
    } 

} 
+0

有函數聲明中有語法錯誤.. – SuperSaiyan

+1

注意'maxn'在函數聲明沒有做任何事情。你的函數和聲明爲'void abovebelow(int n,float days [] [2])'或者'void abovebelow(int n,float(* days)[2])''一樣。在C++中數組永遠不會被值傳遞;當一個數組傳遞給一個函數時,它被隱式轉換爲一個指向其初始元素的指針。當你看到一個數組類型的函數參數時,它實際上和指針相同。 –

回答

1

你可以用簡單的for循環做到這一點。爲什麼使用兩個嵌套循環呢?

而且加時,如果條件可以修改爲:

for (int i=0; i<n; i++) { 
    if (days[i][0]*days[i][1]<0) { 
     counter++; 
     cout<<"Day "<<i+1<<endl; 
    } 
} 
cout<<"Counter: "<<counter<<endl; 

PS:

1.I希望其在代碼中的錯字您粘貼。函數聲明中有一個語法錯誤。

2.在標準的C++中,沒有VLA(你在不知不覺中使用你特定的編譯器)。除非maxnconst(感謝詹姆斯),你將需要:

float *a = new fload[n]; 

//do all the stuffs here 

delete[] a; 
+0

因爲我不僅需要計數器,還需要發生這種情況的日期的索引,並且一個for-loop僅打印出並非全部的第一次出現。我會編輯我的問題,使其更清楚! – d12n

+0

編輯答案.. – SuperSaiyan

+1

'maxn'可能是一個常數,在這種情況下,聲明是格式良好的。 –