请给位看下这个关于C语言的问题,有点困惑

zhangbencheng 2012-10-28 04:26:20
#include<stdio.h>
void main()
{
char s[100];
int c,i;
scanf("%c",&c);
scanf("%d",&i);
scanf("%s",s);
printf("%c,%d,%s\n",c,i,s);
}
输入123空格456空格789
输出1,23,456
这是怎么回事啊!
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
w3562163 2012-10-29
  • 打赏
  • 举报
回复
%c是接收char类型的数据,接收一个字符,结是输出1,23,456
wengdunliang 2012-10-29
  • 打赏
  • 举报
回复
%c改成%d
%c是接收char类型的数据,你输入的1被当做char储存,所以i只能接收剩下的23,然后s接收456。
jiemo1123 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

scanf输入的东西会先放在键盘缓冲区内,然后变量赋值要看输入数据是否与前面的格式匹配,不匹配就直接跳过,看后面是否有匹配的,1匹配%c,23匹配%d,456匹配%s,注意,123和456中间的空格,与前后不匹配,所以就被直接抛弃了,这也解释了,为什么789没有读入,因为前面有个空格
[/Quote]
缓冲区没有没清除掉,可以用getchar()函数吸收缓冲区的内容,window下的话也可以用fflush(stdin)函数
cooloyty 2012-10-28
  • 打赏
  • 举报
回复
scanf输入的东西会先放在键盘缓冲区内,然后变量赋值要看输入数据是否与前面的格式匹配,不匹配就直接跳过,看后面是否有匹配的,1匹配%c,23匹配%d,456匹配%s,注意,123和456中间的空格,与前后不匹配,所以就被直接抛弃了,这也解释了,为什么789没有读入,因为前面有个空格
lxmuyu 2012-10-28
  • 打赏
  • 举报
回复
你第一个scanf("%c",&c);读了一个字节放到变量c里面,然后23放到i里面,456放到了s里面

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧