2014-09-12 143 views
0

我目前正試圖讓while循環工作,但它不會以我想要的方式。我想要做的是循環,直到一個特定的輸入被放入。有些東西一定是我的語法錯了,但我無法弄清楚什麼。爲什麼我的while循環以這種方式執行?

#include <stdio.h> 

int main() 
{ 
    float input = 0; 
    scanf("%f", &input); 
    while(input!=0) 
    { 
     printf("hello\n"); 
     scanf("%f", &input); 

    } 
    return 0; 
} 

由於某些原因,當它爲零時,它不會突破while循環。我希望while循環在有人輸入0後停止工作,但是當有人輸入0時,它會創建一個無限次的「hello」打印。正如你可能猜到的那樣,只要用戶輸入除float之外的任何東西,輸入就變爲0,所以如果我輸入一個字母,我期待while循環停止,但它不支持; \

編輯:

謝謝你們的幫助!我瞭解並弄清楚爲什麼我的邏輯錯了(由於缺乏對如何測試scanf值的理解)!乾杯。

+0

歡迎循環浮點的世界它的永無止境的問題:) – 2014-09-12 20:32:58

+0

你應該檢查'scanf'的結果。 – 2014-09-12 20:33:29

+0

謝謝,但是我應該如何重新修改語法以使其突破while循環? – Belphegor 2014-09-12 20:33:40

回答

3

input確實不是如果用戶輸入非浮點數,則該值變爲零。 scanf不會更改該值,也不會消耗任何字符。所以,如果用戶輸入一個非浮點數,scanf會一直重複讀取相同的字符。

您可以測試scanf返回值以查看它是否成功讀取任何內容。 scanf返回成功讀取域的數量,所以返回值爲0意味着它無法解析什麼:

while(scanf("%f", &input) == 1) { 
    printf("You entered %f\n", input); 
} 
+0

對,對不起,我打算說解析你的意思,因爲我記得如果它沒有讀取它,它會返回0和1,如果成功。 – Belphegor 2014-09-12 20:37:03

0

寫像

while(input!=0) 
    { 
     printf("hello\n"); 
     input = 0.0; 
     scanf("%f", &input); 

    } 
相關問題