2014-01-09 40 views
-11

每次我嘗試按Ctrl-Z while循環它不會打印出平均值。C循環後無法完成讀取程序

#include <stdio.h> 

int main(void) 
{ 
    float a; 
    float b = 0; 
    int counter = 0; 
    while(1){ 
     scanf("%f", &a); 
     b += a; 
     counter++; 
    } 

    float average = b/counter; 
    printf("%f", average); 
    return 0; 
} 
+1

Ctrl-z只是掛起一個工作,暫停它。它不會導致它跳出循環。 – Derek

+1

停止獲得日光浴並繼續做功課,花花公子:) –

+0

可能這是在Windows上,其中Ctrl + Z與Ctrl + D在Linux中的功能非常接近。 http://en.wikipedia.org/wiki/Control-Z –

回答

4

因爲沒有條件去break out(終止)循環,即這是一個無限循環。

試試這個:

while(1){ 
    if(scanf("%f", &a) == 1) 
    { 
     b += a; 
     counter++; 
    } 
    else break; 
    } 
} 

現在,按按Ctrl + Z(你在問題中提到)將終止循環。

+0

也許這是在Windows上,Ctrl + Z與Ctrl + D在Linux中的功能非常接近。見http://en.wikipedia.org/wiki/Control-Z –

+0

@FredLarson;我知道。閱讀OP的問題。他正在談論「Ctrl + Z」。 – haccks

+0

是的,我應該把@unwind放在那。 –

4

如果你在Linux中,並期望Ctrl + Z來完成輸入,你錯了。這是Ctrl + D,但它是Ctrl + Z儘管在Windows中。

(什麼按Ctrl + Z確實在Linux中通常是(在Bash和其他shell),以暫停程序,這意味着它的暫時停止,但仍然存在的一個過程。)

你應該改變你循環到類似的東西:

while(scanf("%f", &a) == 1) 
{ 
    b += a; 
    ++counter; 
} 

然後再次嘗試用EOF鍵盤序列(或只是一些非數字輸入)。

0

而不是while(1),您需要測試eof()。

嘗試while(scant("%f", &a) == 1)

看到手冊頁很少(),看看它說什麼關於返回值,在底部。

0

你的控件Z正在影響整個程序,因爲當你點擊cntrl-Z時,它在循環內部,最終的部分永遠不會執行。

1

經驗法則:

NEVER使用一個無限循環,而不確保你有一個hitablebreak聲明。

#include <stdio.h> 

int main(void) 
{ 
    float a; 
    float b = 0; 
    int counter = 0; 
    while(1){ 
     if(scanf("%f", &a) == 1) 
     { 
      b += a; 
      counter++; 
     } 
     else break; 
    } 

    float average = b/counter; 
    printf("%f", average); 
    return 0; 
}