2014-04-01 41 views
1

全球變暖。作爲全球變暖分析的一部分,研究機構每天中午一次跟蹤北極的室外溫度一年。在每個月的月底,這些溫度被輸入到計算機中並被處理。操作員將根據月份輸入28,29,30或31個數據項。您可以使用-500作爲最後一個溫度後的標記值,因爲它低於絕對值0.您的主程序應該調用此處所述的read_temps(),hot_days()和print)temps()函數:哨兵價值在陣列使用c

我的問題是,哨兵值只用於while循環的權利,或者有辦法在循環中使用它。正如你所看到的,我試圖將溫度放在月度陣列中,但我必須考慮本月有多少天。

#include <stdio.h> 
#include <conio.h> 

int main() { 
     int temp; 
     int x; 

     int dailyTempsAry[31]; 

     printf("Please enter today's temperature: \n"); 
     scanf("%d",&temp); 

     while (temp != -500) { 
       for (x = 0 ; x<31; ++x) { 
         dailyTempsAry[x] = temp; 

         printf("Please enter today's temperature:\n "); 
         scanf("%d",&temp); 
       } 
     } 

     for (x = 0 ; x<31; ++x) { 
       printf("%d\n",dailyTempsAry[x]); 
     } 

     getch(); 
     return 0; 
} 
+0

如果你想讀取固定天數的數據只有31,30,29或28天那麼爲什麼需要使用定位值。 –

+0

thnx傢伙我明白了。 – user3483718

回答

1

可以在for循環使用定點,只是邏輯上&&它的條件:

for (x = 0 ; x < 31 && temp != 500; ++x) 
+0

這樣,他將無法獲得所有31天的數據。 –

+0

@MatHatter好的,讓我再次讀取邏輯。 –

+1

有點自己的努力可能留給讀者去鍛鍊...... – glglgl

2

你可以在使用它們的循環同樣出色,例如:

for (int i = 0; arr[i] != sentinel; ++i) { 

} 
+0

但是當我做你的循環時,它只是把哨兵放在陣列中 – user3483718

2

for循環只是while循環更好的格式。

考慮以下幾點:

for (int i=0; i <= 10; ++i) 
{ 
    // do something 
} 

與此相比:

int i=0; 
while (i <= 10) 
{ 
    // do something 
    ++i 
} 

它們之間的選擇通常只是代碼的可讀性,因爲這可能很容易地做出與其他執行。

最重要的是,一對夫婦有用的關鍵詞就知道爲循環使用的有:

  • continue - 停止循環的這個迭代&開始下一個
  • break - 退出循環

所以無論你計劃你的循環,你總是可以包括像一張支票:

// do something (inside the loop)... 
    if (temp <= -274) 
    { 
     break; 
    } 

在你的情況下,你可能想要包含一個計數器(比如for循環迭代器)和一個結束條件,因爲報告這些會很有用,並且/或者如果小於28或超過31個樣本。

+1

+1,我也會建議'休息'。 –

0

我希望我沒有讓步太多,但要更好地利用一個哨兵值可以使用,但事實上...

,您可以撥打32個元素的數組,並填補了最後你的哨兵有5個職位,-500。然後你的處理循環可以總是終止於這個值,你不再需要檢查循環的邊界。

int array[32]; 
int i; 
array[27]=array[28]=array[29]=array[30]=array[31]=-500; 

// read 28,29,30 or 31 values. 

for (i=0; array[i] != -500; i++) { 
    // process temp 
}