关于gets和scanf函数

本文介绍了一个C语言程序,该程序利用scanf和gets函数输入学生的姓名和成绩,并计算平均分数。文章强调了在输入含有空格的字符串时使用gets而非scanf的重要性,并通过fflush(stdin)清空输入缓冲区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值