標籤:class blog com os 問題 io
程式清單6.5 compflt.c是比較浮點數是否相等的例子。
原程式如下:
// cmpflt.c -- 浮點數比較#include <math.h>#include <stdio.h>int main(void){const double ANSWER = 3.14159;double response;printf("What is the value of pi?\n");scanf("%lf", &response);while (fabs(response - ANSWER) > 0.0001){printf("Try again!\n");scanf("%lf", &response);}printf("Close enough!\n");return 0;}
在while迴圈中輸入的時候,如果輸入非數位字元,則會陷入死迴圈。
我重新修改了一下,修改後的程式如下:
// cmpflt.c -- 浮點數比較#include <math.h>#include <stdio.h>int main(void){const double ANSWER = 3.14159;int status = 0;double response;printf("What is the value of pi?\n");status = scanf("%lf", &response);while (fabs(response - ANSWER) > 0.0001 && status == 1){printf("Try again!\n");status = scanf("%lf", &response);}if (status == 1)printf("Close enough!\n");elseprintf("You input a wrong char.\n");return 0;}
仍然有問題,如果輸入字元,比如"w",則比較過程直接結束了。較好的方法應該是在while迴圈內假如if判斷語句。