| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13788 人关注过本帖
标题:scanf和cin如何判断输入结束呢,O(∩_∩)O谢谢
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()/printf()返回的这类,都可算是错误码,因为它表征正确处理的结果,而getchar()的返回值夹杂了读入的数据和错误码(EOF),就是不良设计。看看fopen()函数吧,这是旧式经典函数,利用返回NULL指针表示文件打开失败,但并不知道为什么会失败(因为文件无法打开的原因有多种可能),仅用NULL是反映不来的,但如果用数值,又会与FILE*的值混淆。新版VC建议废弃fopen(),使用安全函数fopen_s(),这个函数的返回值不是FILE*,而是errno_t,即int,就是错误码,不同的数值代表不同的错误原因(其实main()返回给操作系统的整数值就是这样用的),所以使用新版VS的时候,经常看到一些应采用安全型函数的警告信息,指的就是这些,除了fopen_s(),还有scanf_s()/printf_s()函数,如我上面代码所示。

授人以渔,不授人以鱼。
2013-04-14 17:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用如蜗牛在2013-4-14 16:57:21的发言:

此外,您说到,关于数据输入的问题,一个scanf();一次最好读入一个数据。
 
是因为什么呢?
 
是因为我的两次输入数据都会产生回车键吗?所以结束时缓存中第一个数据产生的回车键会对第二个数据可能有影响吗?这里有一个问题不清楚,我在输入scanf时,回车键是什么时候,如何产生的呢?

每次读入2个数据项,当scanf()返回1的时候,你并不知道是哪一项错了,正如我上面截图显示的,两次错误数据,一次在前,一次在后,结果都一样,但代码却不知道错的是哪个,它知道有错而已,这样对你写修正错误的代码不利(毕竟处理错误是程序的事,不能向用户抛出错误结束程序了事的)。

错误的原因是输入的字符x不是合法的整数字符。scanf("%d")要求得到整数,那么它期待读到的字符串是可以被解析成整数的,但字符'x'无法解析成整数,所以这一个数是读不了的,也是返回只能返回1的原因,假如两个都无法正确解析,它会回返0。

授人以渔,不授人以鱼。
2013-04-14 17:11
如蜗牛
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:42
注 册:2013-4-12
收藏
得分:0 
回复 22楼 TonyDeng
噢噢噢···版主好博学,深切受教!以后还请多多指教!!!不胜感激!
2013-04-14 23:09
快速回复:scanf和cin如何判断输入结束呢,O(∩_∩)O谢谢
数据加载中...
 
   



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

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