#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就需要清除输入缓存区(因为它能读取空格、回车、制表符);
能先看懂我问的什么吗?
追答不好意思哦,问题是这样的
scanf("%s",&b);这句话说明你可以输入一个字符串,但系统给你的空间只有一个字符,也就是说只有第一个字符赋给了b,实际上你有两个字符,一个回车符,还有一个你输入的符号,那它就把最后的那个字符赋值给b了。
如果一定要用%c的话,那就在scanf之前加一句fflush(stdin); 其功能就是清除缓冲区
为什么不把回车符赋值给b?而是最后那个字符? 回车在前,应该先提取回车符啊
追答这个就不太清楚了
哪里错了?我的VC++6.0可以运行的
追答输出怎么跟输入不一样啊
追问用%s一样,用%c不一样
追答你看嘛 我直接上图