首页 > 代码库 > C Primer Plus 例子6.5中的小问题
C Primer Plus 例子6.5中的小问题
程序清单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"); else printf("You input a wrong char.\n"); return 0;}
仍然有问题,如果输入字符,比如"w",则比较过程直接结束了。较好的方法应该是在while循环内假如if判断语句。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。