问题遇到的现象和发生背景
用codeblock或dev写出的苏小红C语言程序设计12.5末的代码,在第37行代码%与ld之间加了空格,会导致跳过后续的scanf到下一个循环
问题相关代码,请勿粘贴截图
#include <stdio.h>
#define N 30
#define M 4
typedef struct date{
int year;
int month;
int day;
}DATE;
typedef struct student{
long studentID;
char studentName[10];
char studentSex;
DATE birthday;
int score[M];
}STUDENT;
void InputScore(STUDENT stu[ ],int n,int m);
void AverScore(STUDENT stu[ ],float aver[ ],int n,int m);
void PrintScore(STUDENT stu[ ],float aver [ ],int n,int m);
int main()
{
float aver[N];
STUDENT stu[N];
int n;
printf("How many student?");
scanf("%d",&n);
InputScore(stu,n,M);
AverScore(stu,aver,n,M);
PrintScore(stu,aver,n,M);
return 0;
}
void InputScore(STUDENT stu[ ],int n,int m)
{
int i,j;
for (i=0;i<n;i++)
{
printf("Input record %d:\n",i+1);
scanf("%ld",&stu[i].studentID);//**%与ld之间有空格会导致输入学号和姓名后跳过后面的输入 **
scanf("%s",stu[i].studentName);
scanf(" %c",&stu[i].studentSex);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for (j=0;j<m;j++)
{
scanf("%d",&stu[i].score[j]);
}
}
}
void AverScore(STUDENT stu[ ],float aver[ ],int n,int m)
{
int i,j,sum[N];
for (i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]=sum[i]+stu[i].score[j];
}
aver[i]=(float)sum[i]/m;
}
}
void PrintScore(STUDENT stu[ ],float aver[ ],int n,int m)
{
int i,j;
printf("Results:\n");
for (i=0;i<n;i++)
{
printf("%ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentName,
stu[i].studentSex,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for (j=0;j<m;j++)
{
printf("%4d",stu[i].score[j]);
}
printf("%6.1f\n",aver[i]);
}
}
运行结果及报错内容
运行没问题,无报错,但是输入了第二个scanf后,后续的scanf会跳过
我的解答思路和尝试过的方法
删除%与ld之间的空格就好了,但不知道为什么