先看程序,再解释!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char c[5]={0};
for(i = 0; i < 3; i++)
{
scanf("%c",&c[i]); // 第一个scanf
printf("kkk ");
}
for (i=0; i<5; i++)
{
printf("%c",c[i]);
}
printf("\nhello world!");
printf("\nhello world!\n");
//fflush(stdin);
for(i = 3; i < 5; i++)
{
scanf(" %c",&c[i]); // 第二个scanf
}
for (i=0; i<5; i++)
{
printf("%c",c[i]);
}
system("pause");
return 0;
}
情景1:
输入:
abcdefghi回车
输出:
kkk kkk kkk abc
hello world!
hello world!
abcde
分析:我们在窗口中输入一串字符后,这些字符被送入一个缓冲区,然后scanf从缓冲区读取字符(因为
输入格式为%c,所以是字符),读一个后便执行 printf("kkk ") 一次,因此有3个kkk 。
但第2个scanf处并没有在窗口中进行字符输入,是因为scanf从缓冲区自动读取了de 这2个字符
。要想在此处可以进行输入可以采用fflush()函数清空缓冲区。
情景2:
对于字符,如果按了回车键,则字符'\n'会也会被赋值给变量。
如输入:a回车,则c[0]='a' c[1]='\n',对于上面的程序,循环还没有结束,所以需要继续输入。
例如:
输入:
a回车
屏幕显示:
a
kkk kkk
继续输入:
b回车
屏幕显示:
a
kkk kkk b
kkk a
b
hello word!
hello world!
继续输入:
cde
屏幕显示:
a
kkk kkk b
kkk a
b
hello word!
hello world!
cde
a
bcd