scanf函数遇到空格时就认为输入结束,而gets函数遇到回车才认为结束,所以在输入时有空格字符时要选择gets函数,下面的程序中经过测试,在不加入fflush(stdin)函数时第二次及后面的循环gets函数将自动结束,也就是说不能输入后面的name,所以要用用fflush(stdin)来清空输入缓存。
#include<stdio.h>
#include<stdlib.h>
#define MAX 50
#define n 5
typedef struct node
{
char name[MAX];
int number;
int scod_1;
int scod_2;
int scod_3;
}student[n];
int main()
{
FILE* pFile=fopen("test.text","a+");
student s;
double all1=0,all2=0,all3=0;
if(pFile)
{
for(int i=0;i<n;i++)
{
printf("input the %d student's name:/n",(i+1));
gets(s[i].name);
fputs(s[i].name,pFile);
printf("input %d number:/n",(i+1));
scanf("%d",&s[i].number);
fprintf(pFile," %d ",s[i].number);
printf("input %d scod:/n",(i+1));
scanf("%d",&s[i].scod_1);
fprintf(pFile,"%d ",s[i].scod_1);
printf("input %d scod:/n",(i+1));
scanf("%d",&s[i].scod_2);
fprintf(pFile,"%d ",s[i].scod_2);
printf("input %d scod:/n",(i+1));
scanf("%d",&s[i].scod_3);
fflush(stdin); //清空输入缓存
fprintf(pFile,"%d/n",s[i].scod_3);
all1+=s[i].scod_1;
all2+=s[i].scod_2;
all3+=s[i].scod_3;
}
double av1=all1/3;
double av2=all2/3;
double av3=all3/3;
fprintf(pFile,"the 1 average is %f ",av1);
fprintf(pFile,"the 2 average is %f ",av2);
fprintf(pFile,"the 3 average is %f ",av3);
}
else
{
perror("open the file error!");
}
fclose(pFile);
return 0;
}