2016-11-25 38 views
0
#define LEN 200 
int main() 
{ 
    int arr[LEN],i; 
    for (i =0; i < LEN; i++) 
     while(scanf("%d", arr[LEN]) == 1){ 
      if((arr[LEN] == arr[LEN]+1) || arr[LEN] < 0){ 
      printf("Bad numbers.\n"); 
      } 
      else if(arr[LEN] == 0){ 
       break; 
      } 
     } 
    printf("Break"); 
return 0; 
} 

我的意思是,如果我正在寫是不同的,大於0且arr[5]a[12]a[any other]不同,應該將其保存到陣列中的數字。但是,如果arr[LEN] == 0它應該停止scanf並將讀取的數字保存到數組中,然後繼續其他的東西。幾個數字後,我的代碼崩潰了。有人能幫助我嗎?陣列,雖然scanf函數崩潰

回答

1
  1. 在for循環中,您需要使用arr [i]而不是arr[LEN]。實際上,arr[LEN]聲明會創建一個名稱爲arr的數組,索引範圍從0LEN-1。所以arr[LEN]超出了你的數組範圍。您需要使用&arr[i]而不是arr[LEN]
  2. if條件中,您需要編寫if(arr[i] == arr[i-1]),因爲您可以只將當前輸入值與以前的值進行比較,而不是下一個尚未輸入的值。但請確保您單獨處理i=0的這種情況,因爲i-1不會是數組的元素。

我認爲這些更改會使您的代碼在所有值上順利運行。 此外,如果您想確保所有數組值不同,則必須將當前輸入值與以前存儲的所有值進行比較。因爲當前值可能與之前的值不同,但可能與之前輸入的值相似。

+0

請花點時間試試鍵入答案的文本框上方的圖標(您始終可以取消更改)。他們可以將您的文本牆變成更可讀,更容易理解的文字,而且只需少量額外的工作。 – Anthon

+0

如果轉換成功,scanf(「%d」,&arr [i])的返回值爲1;如果輸入中有數據但它不與一個十進制整數(例如一個字母)或EOF(總是負數,通常爲-1)不匹配(如果沒有數據要讀取或者出現一些錯誤),它將爲0正在讀取的設備。 ['scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)函數永遠不會返回輸入的長度。如果有多個轉換規範,它將返回成功轉換的數量 - 但是被抑制的分配('%* d'等)和'%n'不計算在內。 –

+0

我不能對其他方面的好答案進行投票,直到你修正第4項爲止。 –