我最近在学习scanf的具体使用。然后遇到了一个问题就是,当我只想给数组的一个元素输入scanf输入的值的时候,无法输入,也无法显示。
程序是这样的:
#include
#include
void main()
{
char a;
char b[10];
char c[10];
char *p;
p=b;
printf("a=");
scanf("%c",&a);
printf("b=");
scanf("%s",b);
printf("a=%c\n",a);
printf("b=%s\n",b);
printf("p=b=");
scanf("%s",p);
printf("c=");
scanf("%c",&c[0]);
printf("p=%s\n",p);
printf("c[0]=%c\n",c[0]);
}
结果是这样的:
a=a
b=apple
a=a
b=apple
p=b=pineapple
c=p=pineapple
c[0]=
程序直接跳过了c=之后的scanf,这是为什么呢?
没有清空内存缓冲区。1、flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
2、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)。
下面是我的代码:
#if 1
#include
int main()
{
char a;
char b[10];
char c[10];
char *p;
p = b;
printf("a=");
scanf("%c", &a);
fflush(stdin);
printf("b=");
scanf("%s", b);
fflush(stdin);
printf("a=%c\n", a);
printf("b=%s\n", b);
printf("p=b=");
scanf("%s", p);
fflush(stdin);
printf("c=");
scanf("%c", &c[0]);
fflush(stdin);
printf("p=%s\n", p);
printf("c[0]=%c\n", c[0]);
return 0;
}
#endif
附图片:
字符串的输入除了指针类的话,不能直接用scanf函数的
你在每个scanf的后面加句getchar();试下。。。
一般要加个getchar()来吸收回车符