| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:灰常简单的小问题啊谁来解答
只看楼主 加入收藏
dleenig
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-12
结帖率:100%
收藏
 问题点数:0 回复次数:8 
灰常简单的小问题啊谁来解答
时间长不碰C++了,今天突然碰见个小问题,部分程序如下:
 for(i=0;i<10;i++)
      scanf("%d\t",&a[i]);
为什么加了“\t”时需要输入11个数(每次输入完数字后都按的是回车键)才算输入完成,而不加“\t”时刚好是10个数?

[ 本帖最后由 dleenig 于 2012-10-3 16:18 编辑 ]
搜索更多相关主题的帖子: 今天 
2012-10-02 18:28
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
还真么遇过这种问题,求解答
2012-10-02 18:49
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
"%d\t"的意思就是一个十进制整数接着是一个制表符,循环10次,则输入的时候要这样输入10次。scanf的用法及格式化字符串的详细知识在baidu上多得很,何必拿到这来问,并且这个应该是C的东西吧?不属于C++。

My life is brilliant
2012-10-02 23:18
dleenig
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-12
收藏
得分:0 
回复 3楼 lz1091914999
C与C++都用这些字符啊,没必要计较这些,斑竹大哥,解释下为什么第一种情况是11次才是重点……如果您不会的话,可以不回答
2012-10-03 11:39
dleenig
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-12
收藏
得分:0 
我知道了,第11个数实际上是\t的结束标志(不计入总数)最终结果不受影响。
唉,我真笨啊,居然想了一天
2012-10-03 16:26
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
以下是引用dleenig在2012-10-3 11:39:14的发言:

C与C++都用这些字符啊,没必要计较这些,斑竹大哥,解释下为什么第一种情况是11次才是重点……如果您不会的话,可以不回答


scanf格式字符串中如果有空白字符(空格,\t,\n等),则代表在下一个输入项之前跳过任意个空白字符,当然包括没有空白字符的情况。
假设使用scanf("%d\t");输入:
123(回车)
这里程序依然处于阻塞状态,不管你敲多少个回车都一样,因为最后那个\t代表之后还有一个输入项,也就是还没遇到一个非空白字符,单单敲一个回车只会在输入缓冲区中增加一个'\n',但因为\t的原因马上就被跳过了,当然你输入任何一个非空白字符,则阻塞将结束(也就是scanf返回了),但你输入的这个字符还在缓冲区里(哦还有一个'\n'),下次调用scanf的时候将从这里开始扫描(也被称作缓冲区中的残留),VC6可以用fflush(stdin)来清理掉,但这并不是标准的解决办法,最好用:
char ch;
while ((ch = getchar()) != '\n' && ch != EOF) ;
来清理,fflush(stdin)似乎只能在VC6里用,其它地方使用的行为都是undefined。当然如果你之后不再使用scanf那么上面说的这些就没必要。

当然楼主把这个\t称为"结束标志",这样也没错,不过"不计入总数"就有问题了,格式化字符串中只有一个%则代表只会输入一个项,其它的只不过是匹配之后丢掉而已。

另外说一点,C++是使用cin来输入的,不是scanf,scanf这个函数是C标准库里的,之所以在C++里也能用,只不过是因为向下兼容而已。

还有些新手朋友遇到的问题是scanf("%d\n");的问题,这种情况跟楼主的一样。

[ 本帖最后由 lz1091914999 于 2012-10-3 21:09 编辑 ]

My life is brilliant
2012-10-03 21:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
自己动手丰衣足食。我非常鼓励大家自己找到答案的,寻求解决方法。

楼主知道为什么这类问题大家不太爱答吗?
一是问题比较常见,在网上很容易找到答案。就算是在本论坛搜搜老帖,也有很多。
二是这个问题是细节问题,具体回答起来非常费劲。我们提供一下思路帮助楼主寻找答案的方向会比较容易。
2012-10-04 12:17
dleenig
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-12
收藏
得分:0 
回复 6楼 lz1091914999
版主大爱啊,对不起,我以后好好学习
2012-10-04 18:04
dleenig
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-12
收藏
得分:0 
回复 7楼 pangding
谢谢,知道了,我自学的C语言,还不是很会,希望各版主见谅啊,下次我尽量找不到答案时再问。
2012-10-04 18:12
快速回复:灰常简单的小问题啊谁来解答
数据加载中...
 
   



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

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