标题:【编程问题3】
只看楼主
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
Tmeperatures 只管换算和打印,循环的控制交给 main 逻辑上会觉得更好一些。
 
用 scanf("%f", &fah) == 1 这个条件,可以看出是不是成功读了一个值。当它返回 0 的时候,表示它没读成。你可以用 getchar 之类的查输入的是不是 'q'。是的话,break。不是的话,你可以考虑怎么做错误处理。
 
考虑的问题挺复杂的,一般可以尽量简化:
比如我输入的是 1.34abc 这个怎么算?算是输入了一个非数字,还是算数字?应该转换还是退出?如果是这种情况,用 scanf 就查不出来。它会把 1.34 读进去,然后把 abc 留存缓冲区,下次再读才会出错。如果这不是你想的,就要避免用 scanf 这个函数。
2010-08-20 23:25
wackyjason
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-8-17
得分:0 
回复 11楼 pangding
谢谢你的回复
第一点说的很对。
第二点,scanf () == 1这个结构我还从来没用过和见过,我刚开始学习C语言,刚开始看了一部分书,只知道用书上提供的方法解答这道题目。getchar也没用过。
第三点,输入函数我暂时还就会用scanf(),其它的都不会。
2010-08-20 23:58
wackyjason
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-8-17
得分:0 
望谁给解答一下,谢谢了。
2010-08-21 11:52
wackyjason
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-8-17
得分:0 
还在等待帮助中……
2010-08-21 21:14
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
呵呵,期待的这么久,抱歉了。
 
scanf 返回的是一个 int ,表示它成功读到参数的个数。你这里一共只让它读了一个,所以如果它返回 1 就表示它读到了。如果返回的是 0 就表示它没读到。没读到的原因可能是因为接下来的数根本不是 "%f" 要求它读的。
比如你用 "%f",但你输入的是 abc 那么它就返回 0,并且 fah 的值不会改变。abc 还留在缓冲区里。你可以用 getchar 或者 "%s" 来读读看,然后分析输入的是什么。但这个方法也不是很全面。比如如果我输的是 13。可能是个 int,但scanf 还是会把它都读进来,当成 13.0。如果你输入的是 1.23abc,那么就如我说的,它也是读 1.23,把 abd 留下。
 
getchar 是从缓冲里读一个字符。
IO的函数还有很多,你可以自己查查手册什么的。不过常用的就是 scanf 函数族(这么说就是包括 fscanf 这些函数)这样的格式化读入函数。还有 getchar 这样的非格式化的。还有一个用来读的函数是 fread。楼主如果初学的话,不用太着急记这些函数,日后自然有学到的机会。
2010-08-21 22:43
wackyjason
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2010-8-17
得分:0 
回复 15楼 pangding
谢谢,我写的那个函数如果要调整该如何做?我现在学到的阶段还没有提过你说的这几个用法,这个题目现在出现是不是在我的程序的基础之上改进一下就能解决问题了?有一种不需要用到这些函数的方法?

[ 本帖最后由 wackyjason 于 2010-8-22 01:06 编辑 ]
2010-08-22 01:04
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
你就写
if (scanf() == 1) Tmeperatures ()
else break;
大约这样就行了。有的问题不用想的太麻烦。
2010-08-22 11:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-316275-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.457839 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved