如何在循环中使用scanf

来源:百度知道 编辑:UC知道 时间:2024/05/17 08:33:50
#include<stdio.h>
main()
{
int i;
char b[10];
for(i=0;i<5;i++)
{
printf("input again:");
scanf("\n%c",&b[i]);
}
for(i=0;i<5;i++)
printf("%c ",b[i]);
}
程序可以正常输入
输入方式:a回车b回车c回车d回车f回车
若把scanf("\n%c",&b[i]);改成scanf("%c\n",&b[i]);则会少获取一个字符。这是为什么?
请告诉我详细的过程。
能详细解释缓冲区的原因吗?

缓冲区就是你输入的时候把输入的放到缓冲区里面,虽然已经赋值过了,但是缓存区里面的东西可能会影响你下次的输入,比如
#include<stdio.h>
main()
{
int i;
char b[10];
for(i=0;i<5;i++)
{
printf("input again:");
scanf("%c",&b[i]);
fflush(stdin);
}
for(i=0;i<5;i++)
printf("%c ",b[i]);
}
fflush(stdin)是用来清空输入缓冲区的,你可以试着把这句话注释起来看看效果,你的程序加个这个应该会正常吧~~但是你的输入里面有\n这个不太好办,因为\n本来是用来结束输入的,但是你把这个当做一个输入的字符,那样逻辑会很混乱,我也不知道计算机会吧哪个当做是输入,那个当做是结束~~

缓冲区的原固。