首页 > 代码库 > 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判断语句。