写了个小程序,无限循环了……(已解决)

C、C++和Java语言
回复
ilsoviet1917
帖子: 270
注册时间: 2009-11-11 23:13
送出感谢: 3 次
接收感谢: 0

写了个小程序,无限循环了……(已解决)

#1

帖子 ilsoviet1917 » 2011-04-20 16:05

代码: 全选

#include <stdio.h>

void Temperatures (double far)
{
	double cel, kel;

	while (far != 'q')
	{
		cel = 1.8 * far + 32.0;
		kel = cel + 273.16;

		printf ("%lf est %.2lf Celfius et %.2lf Kelvin. \n", far, cel, kel);

		printf ("Entrez encore(q pour quitter):");
		scanf ("%lf", &far);
	}

}


int main (void)
{
	double n;

	printf ("Entrez un numero:");
	scanf ("%lf", &n);
	Temperatures (n);

	return 0;
}
按“q”以后就开始无限循环,不停地显示最后的计算结果,只能用Ctrl+C停止,求解决
另外,如何实现只要输入的不是数字就会退出?

:em78
上次由 ilsoviet1917 在 2011-04-20 16:24,总共编辑 1 次。
同志们,多年的战争使你们踏遍整个欧洲,前方就是华盛顿白宫,到那里去洗刷你们战争的躯体吧!
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid
送出感谢: 1 次
接收感谢: 23 次

Re: 写了个小程序,无限循环了……

#2

帖子 leeaman » 2011-04-20 16:13

我觉得很不好的编程~~~~~这个不要循环,运行一次算一次就好了
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
灰色小狼
帖子: 4572
注册时间: 2008-12-06 10:38
系统: Arch
送出感谢: 21 次
接收感谢: 30 次

Re: 写了个小程序,无限循环了……

#3

帖子 灰色小狼 » 2011-04-20 16:16

scanf从stdin读取输入流到数据缓冲区,如果格式不符,scanf不会清空缓冲区,所以下次读入的输入流还是原来的那些东西,结果就是不断循环,所以最好清空缓冲区,后面加一下

代码: 全选

while((int c=getchar())!='\n' && c!=EOF)
            ;
上次由 灰色小狼 在 2011-04-20 16:26,总共编辑 1 次。
ilsoviet1917
帖子: 270
注册时间: 2009-11-11 23:13
送出感谢: 3 次
接收感谢: 0

Re: 写了个小程序,无限循环了……

#4

帖子 ilsoviet1917 » 2011-04-20 16:23

解决,谢谢两位 :em11
同志们,多年的战争使你们踏遍整个欧洲,前方就是华盛顿白宫,到那里去洗刷你们战争的躯体吧!
回复

回到 “C/C++/Java”