最近看到教材上这样写但看不懂:fgets函数会在结尾存储\n,\0第一次读取后缓存区中会留下换行符,所以需要调用fflush函数刷新缓存区,否则换行符会被存入下一个变量中。既然fgets已经读取了换行符,为什么缓存区中还会留下换行符呢?
教材原话基本上是这样,我在写清楚点哈
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char initial[2]={0};
char name[87]={0};
printf("enter your first initial:");
fgets(initial,sizeof(initial),stdin);
fflush(stdin);
printf("enter your name:");
fgets(name,sizeof(name),stdin);
size_t length=strlen(name);
name[length-1]='\0';
if(initial[0]!=name[0])
printf("\n%s,you got your initial wrong.\n",name);
else
printf("\nHi,%s.Your initial is correct.Well done!\n",name);
system("pause");
return 0;
}
注意,fgets()函数在输入字符串中存储一个换行符来对应按下的回车键。在第一个读取操作中,输入缓存区中会留下一个换行符,所以调用fflush()函数刷新stdin,并删除它,否则,换行符会成为name的输入内容。既然fgets()已经读取了换行符,为什么还会在缓存区中留下呢?如果去掉fflush(),结果确实不对啊。