|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 输入运算符Scanf的这种用法是什么意思?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
8198
人关注过本帖
标题:
输入运算符Scanf的这种用法是什么意思?
只看楼主
加入收藏
孟晓文
等 级:
新手上路
帖 子:7
专家分:0
注 册:2011-8-6
结帖率:
50%
楼主
收藏
已结贴
√
问题点数:15 回复次数:10
输入运算符Scanf的这种用法是什么意思?
程序:
# include<stdio.h>
main()
{
int a;
char ch;
scanf("%3d%3c",&a,&ch);
printf("%d,%c",a,ch);
}
输入12345和abc
输出结果是:123,4
请问scanf("%3d%3c"……这是什么意思?
搜索更多相关主题的帖子:
abc
2011-10-09 00:45
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
2
楼
收藏
得分:0
发挥你的想象力,猜!
从字面信息就猜得出来。
授人以渔,不授人以鱼。
2011-10-09 00:47
举报帖子
使用道具
赠送鲜花
孟晓文
等 级:
新手上路
帖 子:7
专家分:0
注 册:2011-8-6
第
3
楼
收藏
得分:0
回复 2楼 TonyDeng
大概猜出了一点,就是我这人语言组织能力差,思维慢一点,你能不能给我详细讲解一下,谢谢了。。。
2011-10-09 00:52
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
4
楼
收藏
得分:15
你看,"%3d%3c",由于已经声明这是读入数据,每个%号代表一个单元,因此很明显是读两个数据。数字3从读取动作来看,应该就是读入数据的位数或个数、宽度。d,在英文中就是decimal的缩略符号,表明要读入一个3位整数。同样,"%3c"是读入3位character。
因此,信息是很明显的,读整数"%3d"时,最多读到3位,故你输入1234,它也只要123,留下的4,给下面的"%3c"读。但注意看数据类型,"%3c"的数据要给ch,而ch已被声明为char,它只接收1个字符,因此ch='4'。剩下的"5abc",留给接下来的scanf()读取。
授人以渔,不授人以鱼。
2011-10-09 01:01
举报帖子
使用道具
赠送鲜花
孟晓文
等 级:
新手上路
帖 子:7
专家分:0
注 册:2011-8-6
第
5
楼
收藏
得分:0
回复 楼主 孟晓文
我是这样理解的,用十进制整数指定了输入的宽度,也就是3位,输入12345和abc
然后printf("%d,%c");
输出了前三位,也就是123
但后面有点理解不了,控制输入时也是3位字符型,但为什么输出会是整型 4 呢?
2011-10-09 01:01
举报帖子
使用道具
赠送鲜花
孟晓文
等 级:
新手上路
帖 子:7
专家分:0
注 册:2011-8-6
第
6
楼
收藏
得分:0
回复 4楼 TonyDeng
谢谢,这下明白了,谢谢。。
2011-10-09 01:03
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
7
楼
收藏
得分:0
那个不是整型4,而是字符'4'。在输出设备打印字符'4'和数字4,看到的都一样,但本质不同。即不管什么数据,用打印机打出来,都是字符形态。
同样,从键盘读入的其实全部是字符"12345abc",但scanf()会根据格式字符串"%3d"的指定,将字符串"123"转换为整数再赋给变量a,而不是字符串。'4'才是原封不动地赋给变量ch,因为格式串指示那是字符。
现在,你理解scanf()和printf()使用格式字符串的原因了吗?如果没有这个东西,它会办错事的。
[
本帖最后由 TonyDeng 于 2011-10-9 01:09 编辑
]
授人以渔,不授人以鱼。
2011-10-09 01:06
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
8
楼
收藏
得分:0
这个例子还告诉你一个道理:scanf("%3d%3c"),它最多只处理键盘缓冲区中的6个字符,现在你输入了8个字符,它实际上只没收4个,还有4个留在缓冲区中,如果下一个scanf("%3d"),你猜它读到什么?作为程序员的你,应该怎样处理这种问题?编写程序时考虑到这种情况吗?你会轻信scanf()替你读入了正确的数据吗?想过要检验吗?这种检验是在写代码时进行还是程序实际运行时进行?
授人以渔,不授人以鱼。
2011-10-09 01:17
举报帖子
使用道具
赠送鲜花
孟晓文
等 级:
新手上路
帖 子:7
专家分:0
注 册:2011-8-6
第
9
楼
收藏
得分:0
回复 8楼 TonyDeng
受教了,比我们老师讲的还详细,真的不知道该怎么感谢你,总之,谢谢你了,真希望可以拜你为师,呵呵,前提是你接受像我这么迂腐的脑袋。。呵呵,谢谢!
2011-10-09 01:33
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
10
楼
收藏
得分:0
不客气,从5楼看出你挺有悟性,不错的。
授人以渔,不授人以鱼。
2011-10-09 01:39
举报帖子
使用道具
赠送鲜花
11
1/2页
1
2
快速回复:
输入运算符Scanf的这种用法是什么意思?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.022848 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved