社区
C语言
帖子详情
关于scanf的问题
小枫
2010-04-13 11:06:07
int i,j;
scanf("%d,%d",&i,&j);
如果输入1,2输出的话,j=2.要是在1和逗号之间加个空格,j不会是2,说是scanf的严格匹配的问题,但是要是再逗号后面加个空格,为什么j还是2呢,
同样要是把i,j定义为char,不管在什么地方加空格,j都不会被赋值为你你输入的那个字符。
...全文
156
4
打赏
收藏
关于scanf的问题
int i,j; scanf("%d,%d",&i,&j); 如果输入1,2输出的话,j=2.要是在1和逗号之间加个空格,j不会是2,说是scanf的严格匹配的问题,但是要是再逗号后面加个空格,为什么j还是2呢, 同样要是把i,j定义为char,不管在什么地方加空格,j都不会被赋值为你你输入的那个字符。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
super_loverax
2010-12-09
打赏
举报
回复
是啊,会出现这种情况的。如果输入的是数据,那么按照它的格式可以匹配就行了。但是如果输入的是字符,那么就必须注意了。scanf("%c%c",&i,&j);这样输入的两个字符必须是连续输入而不能有空格的,因为空格本身就是一个字符,所以当已经将两个字符赋值完毕后就完了。
huanmie_09
2010-04-13
打赏
举报
回复
楼主了解scanf函数的匹配方式就好了:
scanf匹配非字符型(格式控制串不为%c)内容的时候,忽略前后的空格.
拿楼主的问题来说吧,
格式控制串为%d,%d.
楼主从键盘输入1, 2时,这时输入的值并没有立即存储到变量i和j中,而是放在键盘缓冲区。
然后就是scanf函数开始工作了.
第一个%d匹配键盘缓冲区里的1, 为数字类型,然后尝试在匹配下一个字符,而下一个字符为',', 不属于整形数能表示的范围.因此,第一个%d匹配结束,同时将','字符放回到键盘缓冲区。这时键盘缓冲区的内容为", 2";
然后是控制串里','开始匹配,正好与键盘缓冲区里的','字符匹配;此后键盘缓冲区的内容为" 2";
第二个%d开始匹配,忽略前面的空格,匹配到数字2,然后再尝试匹配,发现键盘缓冲区里为空了。
scanf函数结束工作。
因此i=1, j=2。
如果把格式控制串为%d%d.
输入同样为"1, 2"时,
第一个%d匹配键盘缓冲区里的1, 为数字类型,然后尝试在匹配下一个字符,而下一个字符为',', 不属于整形数能表示的范围.因此,第一个%d匹配结束,同时将','字符放回到键盘缓冲区。这时键盘缓冲区的内容为", 2";
第二个%d开始匹配,同样它将与键盘缓冲区里的','字符进行匹配,匹配失败。此后键盘缓冲区的内容为", 2";
scanf函数结束工作。
i=1, j没有初始化.
楼主可以在本次scanf函数调用后,
再加一句:
scanf("%c%c%d", &ch1, &ch2, &j);
你会发现ch1为',', ch2为' ', j=2.
liyanlin122
2010-04-13
打赏
举报
回复
scanf输入数据时,数字之间加 空格或回车 来分隔
xiuxianshen
2010-04-13
打赏
举报
回复
因为你用的是“%d,%d”的格式
如果定义为char,还是用上面的格式,当然得不到j了
关于
scanf
的匹配规则
问题
关于
scanf
的
问题
C语言通过
scanf
函数读取键盘输入,键盘输入又被成为标准输入 当
scanf
函数读取标准输入时,如果还没有输入任何内容,那么
scanf
函数会被卡住(专业用语为阻塞) 无标准输入时,
scanf
会被阻塞...
关于
scanf
读入的细节
问题
连续输入两个
scanf
的
问题
(字符)1.1
问题
1.2解决办法2.
scanf
读入过程细节(不限)3.为什么读入整数没有那么多事?3.1
scanf
()函数输入字符时的执行原理3.2读取整数时 1.连续输入两个
scanf
的
问题
(字符) 1.1
问题
连续...
关于
scanf
与换行符的
问题
scanf
在读取字符串时,会自动忽略换行符,所以char ch,a[10],b[10];
scanf
("%s",a);
scanf
("%s",b); printf("%s",a); printf("%s",b);当输入abc回车def时,输出abcdef...
关于
scanf
的使用
用
scanf
_s() 代替
scanf
()。 教材里用的
scanf
(),其实在目前Visual Studio版本中已经弃用了,用
scanf
_s()函数代替了.
scanf
() 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。其调用格式为:
scanf
("&...
关于
scanf
与
scanf
_s
今日在输入一个程序时一直改不过来,发现有错误,就是现在下图的情况: 明明已创造了可放入char元素的数组,但是在如图所示的
scanf
_s一行中,使用%s却...
scanf
是在
scanf
_s之前出现的,从前用
scanf
输入函数,现在是用
C语言
69,394
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章