博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Primer Plus中的一个练习题
阅读量:5739 次
发布时间:2019-06-18

本文共 1357 字,大约阅读时间需要 4 分钟。

第五章的最后一个练习题,5-8.

要求:

/*输入一个华氏温度。以double类型读入温度值,并将它作为一个参数传递给用户提供的函数Temperatures()。该函数将计算对应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示这三种温度。它应该用每个值所代表的温度刻度来标识这三个值。Celsius = 1.8 * Fahrenheit + 32.0Kelvin = Celsius + 273.16*/

 最开始,我写了如下的代码:

先用gets(),获取输入字符串,再比较第一个字符是否是数字来判断输入是否合法,再用sscanf()函数读取输入字符串中的数字。

#include 
void Temperatures(double Fahrenheit);int main(void){ double tmp; char str[20]; printf("Enter a temperature in Fahrenheit:\n"); gets(str); while (str[0] >= '0' && str[0] <= '9') { sscanf(str,"%lf", &tmp); Temperatures(tmp); printf("Enter a temperature in Fahrenheit:\n"); gets(str); } return 0;}void Temperatures(double Fahrenheit){ float Celsius, Kelvin; Celsius = 1.8 * Fahrenheit + 32.0; Kelvin = Celsius + 273.16; printf("%.2f %.2f %.2f", Fahrenheit, Celsius, Kelvin);}

 

 

后来发现,如过利用scanf()的返回值作为判断,可以简化代码。

scanf()函数的返回值是成功读入的项目的个数,假如没有读取任何项目,则返回值为0。

简化后的代码:

#include 
void Temperatures(double Fahrenheit);int main(void){ double tmp; printf("Enter a temperature in Fahrenheit:\n"); while (scanf("%lf", &tmp)) { Temperatures(tmp); printf("Enter a temperature in Fahrenheit:\n"); } return 0;}void Temperatures(double Fahrenheit){ float Celsius, Kelvin; Celsius = 1.8 * Fahrenheit + 32.0; Kelvin = Celsius + 273.16; printf("%.2f %.2f %.2f", Fahrenheit, Celsius, Kelvin);}

 

转载于:https://www.cnblogs.com/stayathust/p/3806217.html

你可能感兴趣的文章
OC中KVC的注意点
查看>>
JQ入门(至回调函数)
查看>>
【洛天依】几首歌的翻唱(无伴奏)
查看>>
OpenSSL初瞻及本系列的博文的缘由
查看>>
ISO8583接口的详细资料
查看>>
tmux不自动加载配置文件.tmux.conf
查看>>
经验分享:JavaScript小技巧
查看>>
[MOSEK] Stupid things when using mosek
查看>>
程序实例---栈的顺序实现和链式实现
查看>>
服务的使用
查看>>
Oracle 用户与模式
查看>>
MairDB 初始数据库与表 (二)
查看>>
拥在怀里
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>