关于C语言中scanf的问题

#include<stdio.h>
int main()
{
int a;
char b;
printf("a=\n");
scanf("%d",&a);
printf("b=\n");
scanf("%s",&b);
printf("%d%c\n",a,b);
return 0;
}

该程序中把%s改成%c就会出问题,我已经知道为什么改成%c会出问题,但为什么用%s不会出问题?难道%s不从缓存区提取回车?

从缓存区取出一个字符

char b;

scanf("%c",&b);

printf("%c\n",b);

输入类型要小于变量b的类型,这样才能存放下来;如果是写成scanf("%s",&b);

输入的子串放到b就放不下,运行出错

 

如果是

char b[10];
 scanf("%c",b);
 printf("%c\n",b[0]);
 scanf("%c",b);
 printf("%c\n",b[0]);

输入一次就回车就出现这样的结果:

如果是

char b[10];
 scanf("%s",b);
 printf("%c\n",b[0]);
 scanf("%s",b);
 printf("%c\n",b[0]);

需要输入2次

输入间隔后只需输入一次就显示:

结论:

%s是以空格、回车、制表符为输入结束符;(读字串)

%c就能读取空格、回车、制表符;(读字符)

用%c就需要清除输入缓存区(因为它能读取空格、回车、制表符);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-14
你说对了!%s不从输入缓冲区取广义间隔——'\n'、'\t'、‘ ’等等。所以用scanf是不能读取文章的,因为它不取间隔,一遇间隔就认为输入结束了……本回答被提问者采纳
第2个回答  2013-11-14
把你scanf中的%s 改成%c追问

能先看懂我问的什么吗?

追答

不好意思哦,问题是这样的
scanf("%s",&b);这句话说明你可以输入一个字符串,但系统给你的空间只有一个字符,也就是说只有第一个字符赋给了b,实际上你有两个字符,一个回车符,还有一个你输入的符号,那它就把最后的那个字符赋值给b了。

如果一定要用%c的话,那就在scanf之前加一句fflush(stdin); 其功能就是清除缓冲区

追问

为什么不把回车符赋值给b?而是最后那个字符? 回车在前,应该先提取回车符啊

追答

这个就不太清楚了

第3个回答  2013-11-14
你确定没错?我怎么输出有错 求解追问

哪里错了?我的VC++6.0可以运行的

追答

输出怎么跟输入不一样啊

追问

用%s一样,用%c不一样

追答

你看嘛 我直接上图

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网