c语言 结构体 输入学生个数n。输入这n个学生姓名、学号、五门课成绩。输出姓名、学号、五门课成绩、平均分

c语言 结构体 输入学生个数n。输入这n个学生姓名、学号、五门课成绩。输出姓名、学号、五门课成绩、平均分、总分。程序出错。求指教
#include<stdio.h>
struct information
{
char name[21];
char number[21];
int grade[5];
int average;
int total;
};
typedef struct information INFORMATION;

main()
{
int n,i,k=0,p=0;char ch=0;INFORMATION* Ptr=NULL;
printf("Please input the number of students:");//输入并读取学生数n
scanf("%d",&n);
fflush(stdin);
Ptr=malloc(n*sizeof(INFORMATION));
if(Ptr!=NULL)//若分配内存成功
{
printf("Please input the information:\n") ;//输入学生信息
for(i=0;i<n;i++)//输入姓名(如 bill gates)
{
scanf("%c",&ch);
while(ch!='\n')
{
Ptr[i].name[p]=ch;
p++;
scanf("%c",&ch);
}
Ptr[i].name[p+1]=0;

scanf("%c",ch);//输入学号(含字母、数字)
while(ch!=13)
{
Ptr[i].number[k]=ch;
k++;
scanf("%c",&ch);
}
Ptr[i].number[k+1]=0;

for(k=0;k<5;k++)//输入五门课成绩
{
scanf("%d",&Ptr[i].grade[k]);
}
Ptr[i].total=Ptr[i].grade[0]+Ptr[i].grade[1]+Ptr[i].grade[2]+Ptr[i].grade[3]+Ptr[i].grade[4];
Ptr[i].average=Ptr[i].total/5;
}

printf("The students' information:\n");//打印学生信息
for(i=0;i<n;i++)
{
printf("%s\n",Ptr[i].name);
printf("%s\n",Ptr[i].number);
printf("%d %d %d %d %d\n",Ptr[i].grade[0],Ptr[i].grade[1],Ptr[i].grade[2],Ptr[i].grade[3],Ptr[i].grade[4]);
printf("average:%d total:%d\n\n\n",Ptr[i].average,Ptr[i].total);
}
}
else
{
printf("分配内存失败!");
}

system("Pause");
return 0;
}

改好了,少了个头文件,malloc的定义不对2个错误;可以运行,内容对不对就要看你原来写的程序是不是正确的了,下面是改过后的程序
#include<stdio.h>
#include<malloc.h>
struct information
{
char name[21];
char number[21];
int grade[5];
int average;
int total;
};
typedef struct information INFORMATION;

main()
{
int n,i,k=0,p=0;
char ch=0;INFORMATION* Ptr=NULL;
printf("Please input the number of students:");//输入并读取学生数n
scanf("%d",&n);
fflush(stdin);
Ptr=(INFORMATION*)malloc(n*sizeof(INFORMATION));
if(Ptr!=NULL)//若分配内存成功
{
printf("Please input the information:\n") ;//输入学生信息
for(i=0;i<n;i++)//输入姓名(如 bill gates)
{
scanf("%c",&ch);
while(ch!='\n')
{
Ptr[i].name[p]=ch;
p++;
scanf("%c",&ch);
}
Ptr[i].name[p+1]=0;

scanf("%c",ch);//输入学号(含字母、数字)
while(ch!=13)
{
Ptr[i].number[k]=ch;
k++;
scanf("%c",&ch);
}
Ptr[i].number[k+1]=0;

for(k=0;k<5;k++)//输入五门课成绩
{
scanf("%d",&Ptr[i].grade[k]);
}
Ptr[i].total=Ptr[i].grade[0]+Ptr[i].grade[1]+Ptr[i].grade[2]+Ptr[i].grade[3]+Ptr[i].grade[4];
Ptr[i].average=Ptr[i].total/5;
}

printf("The students' information:\n");//打印学生信息
for(i=0;i<n;i++)
{
printf("%s\n",Ptr[i].name);
printf("%s\n",Ptr[i].number);
printf("%d %d %d %d %d\n",Ptr[i].grade[0],Ptr[i].grade[1],Ptr[i].grade[2],Ptr[i].grade[3],Ptr[i].grade[4]);
printf("average:%d total:%d\n\n\n",Ptr[i].average,Ptr[i].total);
}
}
else
{
printf("分配内存失败!");
}

//system("Pause");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-25
自己运行出来了!你试试。
1、“Ptr=malloc(n*sizeof(INFORMATION));”
2、" scanf("%c",ch);"
3、大循环内,k,p要初始化为零。
4、至于,我加的“getchar();”这是输入成绩后有个回车,不加的话,循环到下一个,“scanf("%c",&ch);”读的就是“\n”.
5、你要仔细注意下循环终止的位置。

#include<stdio.h>
#include<malloc.h>
#include<windows.h>
struct information
{
char name[21];
char number[21];
int grade[5];
int average;
int total;
};
typedef struct information INFORMATION;
main()
{
int n,i,k=0,p=0;
char ch=0;
INFORMATION* Ptr=NULL;
printf("Please input the number of students:");//输入并读取学生数n
scanf("%d",&n);
fflush(stdin);
Ptr=(INFORMATION*)malloc(n*sizeof(INFORMATION));
if(Ptr!=NULL)//若分配内存成功
{
printf("Please input the information:\n") ;//输入学生信息
for(i=0;i<n;i++)//输入姓名,回车结束(如 bill gates)
{
k=0,p=0;

printf("请输入第%i位学生姓名:\n",i+1);
scanf("%c",&ch);
while(ch!='\n')
{
Ptr[i].name[p]=ch;
p++;
scanf("%c",&ch);
}
Ptr[i].name[p]=0;

printf("请输入第%i位学生的学号:\n",i+1);
scanf("%c",&ch);//输入学号(若是4位学号)(含字母、数字)
while(k!=4)
{
Ptr[i].number[k]=ch;
k++;
scanf("%c",&ch);
}
Ptr[i].number[k]=0;

printf("请输入第%i位学生的五门成绩:\n",i+1);
for(k=0;k<5;k++)//输入五门课成绩
{
scanf("%d",&Ptr[i].grade[k]);
}
Ptr[i].total=Ptr[i].grade[0]+Ptr[i].grade[1]+Ptr[i].grade[2]+Ptr[i].grade[3]+Ptr[i].grade[4];
Ptr[i].average=Ptr[i].total/5;
getchar();
}
printf("The students' information:\n");//打印学生信息
for(i=0;i<n;i++)
{
printf("%s\n",Ptr[i].name);
printf("%s\n",Ptr[i].number);
printf("%d %d %d %d %d\n",Ptr[i].grade[0],Ptr[i].grade[1],Ptr[i].grade[2],Ptr[i].grade[3],Ptr[i].grade[4]);
printf("average:%d total:%d\n\n\n",Ptr[i].average,Ptr[i].total);
}
}
else
{
printf("分配内存失败!");
}
system("Pause");
return 0;
}
第2个回答  2012-12-25
同上
相似回答