m0_62667564 2022-03-11 16:35 采纳率: 84.8%
浏览 27
已结题

有关返回指向结构体的指针

#include<stdio.h>
#include<string.h>
typedef struct student
{
int id;
char name[20];
float score[3];
}STUDENT,pstudent;
STUDENT students[50];
void InputStudent(STUDENT
s);
STUDENTFindStudent(STUDENT s[],int n_students,int id);
void ShowStudent(STUDENT
s);
void main()
{
int i,j,n;
int number;
pstudent s;
s=&students[50];
printf("输入学生数量:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
InputStudent(students+i);
for(j=0;j<3;j++)
{
printf("输入第%d科成绩:",j+1);
scanf("%d",(*s).score);
}
}

for(i=0;i<n;i++)
{
    (*s).id=1000+i+1;
}
printf("输入要查找的学生的学号:");
scanf("%d",&number);
s=FindStudent(students,n,number);
if(s!=NULL)
{
ShowStudent(s);
}
else
{
    printf("未找到学生\n");
}
ShowStudent(s);

}

void InputStudent(STUDENT*s)
{
printf("输入学生姓名:\n");

scanf("%s",(*s).name);

}

STUDENT *FindStudent(STUDENT s[],int n_students,int id)//返回指向结构体的指针
{
int i;
int *p;

for(i=0;i<n_students;i++)
{
    if(strcmp(id,students[i].id)==0)
    {
        p=&students[i];
        return p;
    }
}
return NULL;

}

void ShowStudent(STUDENT* s)
{
int i;
if(s!=NULL)
{
printf("%s%d",(*s).name,(*s).id);
for(i=0;i<3;i++)
{
printf("第%d科成绩为:%d",i+1,(*s).score[i+1]);
}
}
else
printf("未找到学生\n");
}

输入学生学号查找并显示该学生信息的功能为什么实现不了,怎么修改

  • 写回答

2条回答 默认 最新

  • a5156520 2022-03-11 17:29
    关注

    修改了一下,如下,主要是结构数组和指针的用法错误:

    #include<stdio.h>
    #include<string.h>
    typedef struct student
    {
    int id;
    char name[20];
    float score[3];
    }STUDENT,pstudent;
    
    STUDENT students[50];
    
    void InputStudent(STUDENT* s);
    
    STUDENT * FindStudent(STUDENT s[],int n_students,int id);
    
    void ShowStudent(STUDENT *s);
    
    int main()
    {
        int i,j,n;
        int number;
        STUDENT * s;
        s=students;
        printf("输入学生数量:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            InputStudent(students+i);
            for(j=0;j<3;j++)
            {
                printf("输入第%d科成绩:",j+1);
                scanf("%f",&(s[i].score[j]));
            }
        }
        
        for(i=0;i<n;i++)
        {
            s[i].id=1000+i+1;
        }
        
    //    for(i=0;i<n;i++){
    //        printf("学生学号;%d,学生姓名:%s,",s[i].id,s[i].name);
    //        for(j=0;j<3;j++){
    //            printf("第%d科成绩;%f,",j+1,s[i].score[j]);
    //        }
    //        
    //    }
        printf("输入要查找的学生的学号:");
        scanf("%d",&number);
        s=FindStudent(students,n,number);
        if(s!=NULL)
        {
            ShowStudent(s);
        }
        else
        {
            printf("未找到学生\n");
        }
        //ShowStudent(s);
    }
    
    void InputStudent(STUDENT*s)
    {
        printf("输入学生姓名:\n");
        
        scanf("%s",(*s).name);
    }
    
    STUDENT *FindStudent(STUDENT s[],int n_students,int id)//返回指向结构体的指针
    {
        int i;
        STUDENT *p;
        
        for(i=0;i<n_students;i++)
        {
            if(id==s[i].id)
            {
                p=&s[i];
                return p;
            }
        }
        return NULL;
    }
    
    void ShowStudent(STUDENT* s)
    {
        int i;
        if(s!=NULL)
        {
        printf("%s %d ",(*s).name,(*s).id);
        for(i=0;i<3;i++)
        {
        printf("第%d科成绩为:%f,",i+1,s->score[i]);
        }
        }
        else
        printf("未找到学生\n");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测