2017-02-09 234 views
0
#include <stdio.h> 

int main() { 
    float change = 0.0; 

    printf("O hai! "); 
    while (change <= 0) { 
     printf("How much change is owed?\n"); 
     scanf("%f\n", &change); 
    } 
    return 0; 
} 

如果輸入是負數,結果是無窮無盡的「欠多少變化?」while循環不執行scanf()

+0

無法重現:如果輸入負數,我只會發生一次「欠多少變化?」,而不是無窮無盡的系列。 – Evert

+2

它也要求正數的兩倍。更改'scanf(「%f \ n」,&change);'==>'scanf(「%f」,&change);' –

+0

步驟1,帶有任何'scanf()'問題:測試它的返回值, scanf(「%f」,&change)!= 1)print_ErrorAndQuit()' – chux

回答

1

scanf實際上進入,但由於格式字符串"%f\n"\n,已進入一個數字,scanf等待下一個非空白字符後返回。請注意,格式說明符中的空格允許scanf消耗所有空白字符的序列,而不僅僅是一個,因此只要流提供了空白字符,就會「掛起」。

scanf("%f\n",&change)更改爲scanf("%f",&change)

1

當您要求電腦放棄空格時,它如何知道它做了什麼?答案:只要它讀取不是空白的東西。

你讓它在讀完一個數字後放棄空格。因此,直到它讀取數字然後讀取一些非空白字符纔會完成。

這真的沒有任何意義,因爲沒有理由任何人輸入數字後輸入非空白。

這裏有一個技巧,雖然這將節省您的痛苦在未來:如果你真正想要做的是讀取輸入的然後分析它,使用讀取一行的函數,然後一些代碼解析輸入。