码迷,mamicode.com
首页 > 其他好文 > 详细

C Primer Plus 例子6.5中的小问题

时间:2014-06-25 15:58:30      阅读:273      评论:0      收藏:0      [点我收藏+]

标签: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");
	else
		printf("You input a wrong char.\n");

	return 0;
}

 仍然有问题,如果输入字符,比如"w",则比较过程直接结束了。较好的方法应该是在while循环内假如if判断语句。

C Primer Plus 例子6.5中的小问题,布布扣,bubuko.com

C Primer Plus 例子6.5中的小问题

标签:class   blog   com   os   问题   io   

原文地址:http://www.cnblogs.com/stayathust/p/3806371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!