2015-04-22 147 views
3
int main() 
{ 
    int t, i; 
    int *nums; 
    scanf("%d", &t); 
    nums = malloc(t * sizeof(int)); 
    for(i = 0; i < t; i++) 
    { 
     scanf("%d", &nums[i]);   
    } 
    printf("hey"); 
} 

由於某種原因,它掛起,等待更多的輸入!有任何想法嗎?爲什麼這個C for-loop無法正常工作?

+0

結果註釋不是延長討論;這個談話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/75968/discussion-on-question-by-antoni4040-why-is-this-c-for-loop-not-working-正確)。 – Taryn

+0

@Wather Vane這是正確的,但使用Visual C++不會編譯沒有演員。所以這是一個建議。 – Diversity

+0

它與我合作。我正在使用visual studio 2010. – CroCo

回答

1

這段代碼是正確的,除了你沒有釋放你的內存(這個簡單的代碼不是一個大問題),你沒有檢查scanf的錯誤,這可能是你的問題的原因。

錯誤檢查和糾正內存處理一個更好的實現如下描述:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int t, i, ret; 
    int *nums; 

    ret = scanf("%d", &t);   
    if(ret != 1) 
    { 
     /* something wrong */ 
    } 

    nums = malloc(t * sizeof(int)); 
    if(nums==NULL) 
    { 
     /* memory error */ 
    } 

    for(i = 0; i < t; i++) 
    { 
     ret = scanf("%d", &nums[i]);   
     if(ret != 1) 
     { 
      /* something wrong */ 
     } 

    } 
    free(nums); 
    printf("hey"); 

    return 0; 
} 
+1

這並不能解釋爲什麼它掛在scanf上或掛在哪個scanf上。 –

+0

即使我這樣寫它也會掛起:int nums [5] – Antoni4040

+2

它說「它掛起,等待更多的輸入」,所以這個懸掛是非常可疑的。 – Tarantula

1

就在這裏猜測...

但我猜你運行它,進入:

4 
1234 

例如,你把4,然後1234,它掛起。那麼,那將是因爲1234是第一個數字而不是4個不同的數字,所以它等待第二個數字。你必須在每個數字之間按回車或一些這樣的分隔符。

試試這組輸入代替:

4 
1234 
29 
4 
5 

你應該得到:

hey 

Pro的語法,你應該從你的函數調用檢查返回值。確保malloc不返回零。確保scanf返回您希望讀取的輸入數量。添加打印輸出,以確保它讀取的值是你所期望/想要讀入的值。

編輯: 猜測你在程序中有一個錯字,這裏沒有顯示。如:

scanf("%s", &t); 

或者你正在得到'嘿',只是沒有看到它。

[[email protected] sotest]$ ./a.out 
5 5 4 3 23 1 
hey[[email protected] sotest]$ 

看到'嘿'是隱藏在我的提示中,因爲你錯過了打印輸出中的\ n'新行?

+0

我輸入5 5 4 3 2 1,應該工作,不應該嗎? – Antoni4040

+0

你真的在每個數字之間輸入一個空格還是你打回來? –

+0

試過兩種情況,結果相同... – Antoni4040

1

當你完成後記得沖洗。

在聊天中,OP的註釋「No ...順便說一句,如果我在循環中添加一個printf來打印當前輸入,它會打印除最後一個之外的所有內容......」。這暗示了這個問題出現在最終結果上。

下面發送數據打印。但stdout通常是緩衝。實際輸出可能直到以後纔會發生。輸出是刷新當1)輸出包含行尾'\n',2)fflush()被稱爲3)程序結束。當程序結束時,我很驚訝輸出沒有出現,但可能OP的真實代碼與帖子不同。

printf("hey"); 

更改爲

printf("hey\n"); 

或者@Cool Guy

printf("hey"); 
fflush(stdout); 

BTW:這也暗示在@Diversity答案。


注:總是一個好主意,檢查的scanf()

// scanf("%d", &t) 
if (1 != scanf("%d", &t)) Handle_BadInput_or_EOF(); 
相關問題