2015-09-23 75 views
-1

我不知道這段代碼發生了什麼事。在循環中使用scanf的程序打印不正確的輸出

#include<stdio.h> 
int main() 
    { 
    int ii[5], i; 
    for (i=1; i<=5; i++) 
    { 
     scanf("%d", &ii[i]); 
    } 
    printf("----------------------\n"); 
    for(i=1; i<=5; i++) 
    printf("%d\n", ii[i]); 
    return 0; 
    } 

編譯後,當我提供輸入作爲

1 2 3 4 5 

然後打印,因爲它是, 但是當我提供相反的順序輸入:

5 4 3 2 1 

它不斷地問起來到更多的數字,然後打印出一組隨機數字。

我該如何解決這個問題?

+1

'ii [i]'對於'i = 5'是UB。 –

+3

'for(i = 1; i <= 5; i ++)' - 必須是0..4而不是1..5 – Matt

+0

這些隨機數字實際上是未定義的行爲,而你很幸運,你只能得到它們。 請注意,數組是從零開始的,索引從0運行到N-1,而不是從1運行到N. – Maroun

回答

3

C使用0 indexing這意味着數組下標0不是1。啓動遍歷數組應該是這樣的:

int array[ARRAY_LENGTH], i; 
for (i = 0; i < ARRAY_LENGTH; ++i) { 

這將確保i0ARRAY_LENGTH - 1並不會超出數組的範圍。

這些線:其中最大的指數是4,這將導致未定義行爲這可能是爲什麼你看到的隨機數出現

for(i=1; i<=5; i++) 
printf("%d\n", ii[i]); 

將訪問的ii元素5