2013-07-28 113 views
0

編輯:哇。我在scanf函數中忽略了'&'。感謝您的幫助。For循環中C被崩潰

我使用的代碼::塊,而我試圖建立一個簡單的程序來提示用戶輸入10個數字,然後顯示出來。問題是,它會打印出問題,但是一旦我鍵入一個數字,它就會崩潰,而不是使用下面的scanf()...代碼進行分配。

main() 
{ 
    int userNums[11] = {0}; 
    int x; 
    char displayOrder = '\0'; 

    for (x = 0; x <= 10; x++) 
    { 
    printf("Enter a number: "); 
    scanf("%d", userNums[x]); //code crashes here 
    } 
//code continues... 
+2

改變'&userNums [X]' – BLUEPIXY

+0

當你編譯上面的代碼,你會得到警告。考慮警告爲錯誤。 – sujin

+0

而不是使的假設,你應該閱讀[文件](http://pubs.opengroup.org/onlinepubs/009695399/functions/scanf.html)的您正在使用的功能。 – 2013-07-28 17:49:00

回答

1

修復:

scanf("%d", &userNums[x]); //code won't crash now 
+2

你能解釋它爲什麼崩潰嗎? –

+0

@ShafikYaghmour沒有人允許,在我編輯之前,我看到了其他十個答案的黃色閃光:快速的選票:D – P0W

1

scanf函數讀取標準輸入,並把結果在第二個參數。它必須是一個指針,因爲該函數將獲得您發送的變量的副本。

例子:

int i; 

scanf("Enter a number here : %d", &i); 
printf("number is %d", i); 
0

只是改變

scanf("%d", userNums[x]); //code crashes here 

scanf("%d", &userNums[x]); //code crashes here 

scanf函數需要一個指向能夠改變其值

1

永遠記住scanf()的參數必須是地址(指針)。在你的情況下,userNums[x]需要&運營商。改變

scanf("%d", userNums[x]); 

scanf("%d", &userNums[x]); 

&操作者在前面userNums[x]給出的地址到由scanf用戶來存儲輸入的數據。在沒有&運營商(在這種情況下)scanf的沒有找到地址在哪裏存儲的輸入值,因此你的程序會崩潰。

0

你必須調用scanf()這樣:

scanf("%d", &userNums[x]); 

說明:你想scanf()指定由用戶給一個變量給出的值。因爲,在C 參數是通過副本過去了,你需要你的變量的地址傳遞給scanf(),以便它可以修改它。要檢索變量的地址,請使用&運算符:因此&userNums[x]