2015-11-08 70 views
1

我想添加元素與C中的for循環數組,但是有一些奇怪的事情正在發生。 i變量受使用scanf輸入的數字影響。的輸出將元素添加到C中的數組for循環遞增永遠

int intArray[4]; 
    int i; 
    printf("Input 5 numbers\n"); 
    for(i=0;i<5;i++){ 
    scanf("%d", &intArray[i]); 
    printf("i: %d\n",i); 
    } 

實例:

Entering only 1's

Entering only 2's

和任意數量的按預期或任意數量的插入大於3當i = 3

大於3輸入不斷工作

我不明白爲什麼我以這種方式改變這個循環。

任何幫助,將不勝感激。

回答

1

intArray[4]具有索引0,1,2,3,你的for循環的結束條件是i<5,所以它使用索引4,它是過去的數組的末尾,並可能與可變i重合。

+0

啊我看到了錯誤,現在該如何解決。但爲什麼這會改變循環內的「i」變量?同樣,爲什麼輸入大於3的數字也能克服這個問題呢? – PlasmaticDW

+0

簡短回答:未定義的行爲是未定義的。較長的回答:'intArray [4]'可能與'i'是同一塊內存,所以你覆蓋'i'。至於數字> 3,有趣。 > 4我會(因爲我不會<5循環會停止)。 – John3136

0

那麼,陣列是基於零的,所以在你的情況 我< 5將導致(ⅰ從0到4) 其是指數的無效和出辯論,因爲它應該是(i爲0到3 - 4個元素)