结构体,统计学生数据
系统总是提示少了个括号 )#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define F "%d\t%s\t%c\t%d\t%f\t%f\t%f\t%f\t%f\n"
struct studen
{ int num;
char name[20];
char sex;
int age;
float score[3];
float total;
float avg;
}stu[2];
cout(struct studen stu[].score,int x)//系统总提示这里少个括号
{ float total=0,avg,n;
for(n=0;n<x;n++)
total+=stu[].score[n];
return total;
}
main()
{ int n,m;
char ch;
char str[n];
printf("input学生人数n:\n");
scanf("%d",&n);
for(m=0;m<2;m++)
{
printf("enter all data of stu[%d]:\n",m);
gets(str);
stu[m].num=atol(str);
gets(stu[m].name);
stu[m].sex=getchar();
gets(str);
stu[m].age=atoi(str);
ch=getchar();
for(m=0;m<3;m++)
{ get(str);
stu[m].score=atof(str);
}
stu[m].total=cout(stu[].score,3);
stu[m].avg=stu[m].total/3;
}
printf("\n姓名\t学号\t年龄\t性别\t计算机\t数学\t英语\t总分\t平均分\n");
for(m=0;m<n;m++)
printf("F",stu[m].num,stu[m].name,stu[m].sex,stu[m].age,stu[m].score[0],stu[m].score[1],stu[m].score[2],stu[m].total,stu[m].avg);
}
在2楼的高手指点下,程序做了修改,但还是在调用函数那出了点问题~~
有一个warning:Suspicious pointer conversion 可疑的指针转换。通常是使用了基本类型不匹配的指针
新的程序如下:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define F "%d\t%s\t%c\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n"
struct studen
{
int num;
char name[20];
char sex;
int age;
float score[3];
float total;
float avg;
}stu[1];
float cout(struct studen *stu,int x)
float total=0;
int n ;
for(n=0;n<x;n++)
total+=stu->score[n];
return total;
}
int main()
{
int n,m;
char str[100];
printf("input学生人数n:\n");
for(m=0;m<1;m++)
{
printf("enter all data of stu[%d]:\n",m);
gets(str);
stu[m].num=atol(str);
gets(stu[m].name);
stu[m].sex=getchar();
getchar();
gets(str);
stu[m].age=atoi(str);
for(n=0;n<3;n++)
{ gets(str);
stu[m].score[n]=atof(str);
}
stu[m].total=cout(stu->score,3);
stu[m].avg=stu[m].total/3;
}
printf("\nnum\tname\tsex\tage\tcmptr\tmath\tEglish\ttotal\tavg\n");
for(m=0;m<1;m++)
printf( F,stu[m].num,stu[m].name,stu[m].sex,stu[m].age,stu[m].score[0],stu[m].score[1],stu[m].score[2],stu[m].total,stu[m].avg);
return 0;
}
[[it] 本帖最后由 tiw 于 2008-3-30 21:56 编辑 [/it]]
----------------解决方案--------------------------------------------------------
哈哈,你的错误一大把啊……
我改的,可以编译,但是不知道功能怎么样:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define F "%d\t%s\t%c\t%d\t%f\t%f\t%f\t%f\t%f\n"
struct studen
{
int num;
char name[20];
char sex;
int age;
float score[3];
float total;
float avg;
}stu[2];
float cout(struct studen *stu,int x)//系统总提示这里少个括号
{
float total=0;
int n = 0;
for(n=0;n<x;n++)
total+=stu->score[n];
return total;
}
main()
{
int n,m;
char ch;
char str[1000];
printf("input学生人数n:\n");
scanf("%d",&n);
for(m=0;m<2;m++)
{
printf("enter all data of stu[%d]:\n",m);
gets(str);
stu[m].num=atol(str);
gets(stu[m].name);
stu[m].sex=getchar();
gets(str);
stu[m].age=atoi(str);
ch=getchar();
for(m=0;m<3;m++)
{ // get(str);//get是什么函数呀?
stu[m].score[0]=atof(str);
}
//stu[m].total=cout(stu[].score,3);有问题,我不知道你什么意思……
stu[m].avg=stu[m].total/3;
}
printf("\n姓名\t学号\t年龄\t性别\t计算机\t数学\t英语\t总分\t平均分\n");
for(m=0;m<n;m++)
printf("F",stu[m].num,stu[m].name,stu[m].sex,stu[m].age,stu[m].score[0],stu[m].score[1],stu[m].score[2],stu[m].total,stu[m].avg);
}
----------------解决方案--------------------------------------------------------
2楼高手啊
----------------解决方案--------------------------------------------------------
回复 2# 的帖子
呵呵,我刚学到结构体的!~~~~谢谢flyue了for(m=0;m<3;m++)
{ // get(str);//get是什么函数呀?
stu[m].score[0]=atof(str);
}
我搞错了,是gets
//stu[m].total=cout(stu[].score,3);有问题,我不知道你什么意思……
这是用结构体数组和3 做实参
cout里做循环
*stu指针还没看~~~
----------------解决方案--------------------------------------------------------
解决了~~~~但问题还在~~~就是结构体做实参或指针做实参的规则不知道
修改后的能用的程序如下:功能是,输入学生的数据,输出总分和平均分~~
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define F "%d\t%s\t%c\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n"
struct studen
{
int num;
char name[20];
char sex;
int age;
float score[3];
float total;
float avg;
}stu[1];
float cout(/*struct studen *stu,*/int x)
{
float total=0;
int n ;
for(n=0;n<x;n++)
total+=stu->score[n];
return total;
}
int main()
{
int n,m;
char str[100];
printf("input学生人数n:\n");
for(m=0;m<1;m++)
{
printf("enter all data of stu[%d]:\n",m);
gets(str);
stu[m].num=atol(str);
gets(stu[m].name);
stu[m].sex=getchar();
getchar();
gets(str);
stu[m].age=atoi(str);
for(n=0;n<3;n++)
{ gets(str);
stu[m].score[n]=atof(str);
}
stu[m].total=cout(3);
stu[m].avg=stu[m].total/3;
}
printf("\nnum\tname\tsex\tage\tcmptr\tmath\tEglish\ttotal\tavg\n");
for(m=0;m<1;m++)
printf( F,stu[m].num,stu[m].name,stu[m].sex,stu[m].age,stu[m].score[0],stu[m].score[1],stu[m].score[2],stu[m].total,stu[m].avg);
return 0;
}
----------------解决方案--------------------------------------------------------