当前位置: 代码迷 >> C语言 >> 结构体,统计学生数据
  详细解决方案

结构体,统计学生数据

热度:591   发布时间:2008-03-27 16:14:53.0
结构体,统计学生数据
系统总是提示少了个括号 )
#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;
}
----------------解决方案--------------------------------------------------------
  相关解决方案