2014-03-28 106 views
1

按下Ctrl + D後,我期待這段代碼打印數組,但它什麼都不做。爲什麼代碼不打印任何輸出?

#include<stdio.h> 

int main(){ 
    int k,i=0,a; 
    int b[10]; 
    while(scanf("%d",&a)!=EOF){ 
     if(a>(a/4+a/3+a/2)) 
     b[i]=a; 
     else 
     b[i]=(a/4+a/3+a/2); 
     i++; 
    } 
    for(k=0;k<=i;k++){ 
     printf("%d\n",b[k]); 
    } 
    return 0; 
} 
+4

討厭這個人,但爲我工作。 ctrl d之前輸入的確切順序是什麼? –

+0

你在編譯你的代碼是什麼? – Aliou

+0

你在使用什麼操作系統?什麼終端? –

回答

4

按Ctrl +d是在類Unix系統中很常見,但Windows系統一般採用按Ctrl +ž

請注意,您可能需要使用按Ctrl +ž兩次如果你不是在一個空行(一次刷新輸入的電流線,而一旦產生EOF)。

0

你應該檢查scanf函數的返回值的文檔...返回掃描,0,1,2,項目數等...不是EOF

+1

實際上,[它返回* * *](http://en.cppreference.com/w/c/io/fscanf)。如果發生讀取錯誤,例如EOF中的* being *,並且仍在嘗試讀取數據,則會返回EOF。 – WhozCraig

1

的最佳答案 - 你輸入不是數字的東西,所以scanf返回0,你的程序進入無限循環。因爲你不顯示你的意見,所以不可能告訴你。

如果你想讓它停止在非數字輸入,你用錯了鑰匙組合生成您的操作系統(Windows 8)的EOF改變環路while(scanf("%d",&a) > 0)