标题:为什么无法显示"成绩最好的是"后面的字符串
只看楼主
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
结帖率:100%
 问题点数:0 回复次数:3 
为什么无法显示"成绩最好的是"后面的字符串
#include<stdio.h>
#define N 4
struct date
{
    int math;
    int english;
    int chinese;
};
struct student
{
    char *name;
    int number;
    int age;
    struct date score;
    float ave;
};
void max(struct student stu[]);
void main()
{
    int i,j;
    struct student CLASS[N],* p=CLASS;
    for(i=0;i<N;i++,p++)
    {
        printf("请输入第%d个人的信息\n",i+1);
        printf("请输入姓名:");
        scanf("%s",p->name);
        printf("请输入学号:");
        scanf("%d",&p->number);
        printf("请输入年龄:");
        scanf("%d",&p->age);
        printf("请输入数学、英语、语文成绩:");
        scanf("%d%d%d",&p->score.math,&p->score.english,&p->score.chinese);
        p->ave=(p->score.math+p->score.english+p->score.chinese)/3.0;
    }
    printf("**************************学生信息**************************\n姓名\t学号\t年龄\t数学\t英语\t语文\t平均成绩\n");
    for(j=0,p=CLASS;j<N;j++,p++)
    {
        printf("%s\t%d\t%d\t%d\t%d\t%d\t%6.2f\n",p->name,p->number,p->age,p->score.math,p->score.english,p->score.chinese,p->ave);
    }
    max(p);
}
void max(struct student stu[])
{
    int i,j=0;
    for(i=0;i<N;i++)
    {
        if(stu[i].ave>stu[j].ave)
            j=i;
    }
    printf("成绩最好的是 %s\n",stu[j].name);
}

[ 本帖最后由 GreenhandG 于 2015-6-23 01:18 编辑 ]
搜索更多相关主题的帖子: 字符串 number include english 最好 
2015-06-23 01:13
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
得分:0 
你试着把结构体里的char *name;改成定常如char name[20];
调用max(p);方法时,p在前面的循环中已经改变,应该用max(CLASS);
2015-06-23 13:35
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
得分:0 
#include<stdio.h>
#define N 4
struct date
{
    int math;
    int english;
    int chinese;
};
struct student
{
    char name[30];
    int number;
    int age;
    struct date score;
    float ave;
};
void max(struct student stu[]);
void main()
{
    int i, j;
    struct student CLASS[N], *p = CLASS;
    for (i = 0; i<N; i++, p++)
    {
        printf("请输入第%d个人的信息\n", i + 1);
        printf("请输入姓名:");
        scanf("%s", p->name);
        printf("请输入学号:");
        scanf("%d", &p->number);
        printf("请输入年龄:");
        scanf("%d", &p->age);
        printf("请输入数学、英语、语文成绩:");
        scanf("%d%d%d", &p->score.math, &p->score.english, &p->score.chinese);
        p->ave = (p->score.math + p->score.english + p->score.chinese) / 3.0;
    }
    printf("**************************学生信息**************************\n姓名\t学号\t年龄\t数学\t英语\t语文\t平均成绩\n");
    for (j = 0, p = CLASS; j<N; j++, p++)
    {
        printf("%s\t%d\t%d\t%d\t%d\t%d\t%6.2f\n", p->name, p->number, p->age, p->score.math, p->score.english, p->score.chinese, p->ave);
    }
    max(CLASS);
}
void max(struct student stu[])
{
    int i, j = 0;
    for (i = 0; i<N; i++)
    {
        if (stu[i].ave>stu[j].ave)
            j = i;
    }
    printf("成绩最好的是 %s\n", stu[j].name);
}



建议;;;  传参数传一个有指向的指针是不行的,把结构体数组传过去就OK啦,还有
name这个,定义的时候是一个指针,之后怎只有指向,怎麽可以把字符串进行复制过去呢,改成字符数组就行啦,嫌麻烦的话可以直接string类   也行
2015-06-23 14:26
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
得分:0 
回复 3楼 T_MACC
thank you  明白了
2015-06-23 15:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-454627-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.476855 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved