| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:谁能解释下这段简单程序
只看楼主 加入收藏
黄河十三号
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-28
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:10 
谁能解释下这段简单程序
程序代码:
#include <stdio.h>
int main()
{
    int a[3];
    int i;
    for (i = 0; i < 3; ++i)
        scanf("%d ", &a[i]);
    for (i = 0; i < 3; ++i)
        printf("%d ", a[i]);
    printf("\n");
}

scanf里不加空格,结果肯定是对的,但这里多加了一个空格,结果就不对了
这个应该和输入缓冲区有关,但自己又想不清楚,谁能帮忙解释下啊

[ 本帖最后由 黄河十三号 于 2012-8-13 23:40 编辑 ]
2012-08-13 23:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
书上说的很明白 为啥不看书呢

罗云彬的书里写的是 scanf里面的格式字符串如果写其他的符号 则输入的时候必须把这些符号一块输入才行
2012-08-14 00:27
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
scanf 里的空白字符有特殊意义,搜搜论坛里的老帖吧。
2012-08-14 03:08
黄河十三号
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-28
收藏
得分:0 
我就是想知道这里加了空格,但输入的时候又不打空格为什么就错了啊,我就是想知道原因
2012-08-14 08:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:15 
scanf 的详细规则其实非常细致,如果真有兴趣自己随便在哪都能查到。还用一直在这问?

scanf 将格式化字符串内的字符分成三类,并区别对待。
一类是转换指示符(conversion specification),指 % 和它后面跟的一些字符。比如 %%, %*c, %10s, %[^0123456789] 都是合法的。
详细的可能就会问了,有哪些合法的控制字符? %和控制字符之间能有哪些东西?如果 % 后面跟的不是合法控制字符呢?如果有兴趣,自己查。
一类是空白字符(white space),包括空格,\n, \t 之类的。它出现在格式化字符串内是指示 scanf 从输入流中忽略所有的空白字符,直至遇到非空白字符(该字符依然保留在流中)或读尽流。
最后一类是普通字符(ordinary character)。它指示向后读一个字符,并期待所读字符与指示相同。否则读取失败。

scanf 族的函数经常会面临失败。除了输入的数值不合法(比如指示 %d 的时候却输入了 abc)以外,也可能由输入流异常引起。
scanf 什么情况下会失败?失败时 scanf 有怎样的行为?scanf 的返回值是什么?

如果楼不是伸手党,如果楼主真心想学好编程,以上问题就当作留给楼主的作业。找到答案后,把它回在下面。
不管你是自已动手写程序试验也好,还是上网找资料也行,这些问题都不难回答。但经过此次,相信你前路的坎坷能减少许多。
2012-08-14 10:15
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
如果用win-tc编译的话是必须输入四个数,然后会输出前三个数。。。。这是什么意思?
2012-08-14 13:17
li361li
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-1-29
收藏
得分:0 
scanf 函数的详细规则去百度
2012-08-14 15:02
黄河十三号
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-28
收藏
得分:0 
回复 6楼 chuanglan
对对对,我就是想问这个,为啥啊
2012-08-14 15:22
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
因为第三个数读完了,后面那个空格指示要读到下一下非空格字符才停止。你就三个数,没有下一个非空字符了,当然卡在哪里等你输入了。

给了答案难道都没想明白?!
2012-08-14 22:15
黄河十三号
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-28
收藏
得分:0 
回复 9楼 pangding
想明白了,谢谢
2012-08-15 09:53
快速回复:谁能解释下这段简单程序
数据加载中...
 
   



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

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