大柯. 2023-04-04 11:04 采纳率: 88.6%
浏览 23
已结题

c语言c++链表问题

打印不出来,就是我想创建一个学生成绩链表,把大于平均分的保存到H2,然后打印。我把所有信息插入到那个H1里面了。
我想要知道改完的代码应该长啥样子啊,然后我是哪里出问题了呀



#include <iostream>
#include <stdlib.h>
using namespace std;
float score_ave=0;
typedef struct stu
{
int num;
string name;
float score;
stu *next;
};
void save(stu *x,stu *H)
{
if(x->score>score_ave)
{
stu *p=new stu;
p->next=H->next;
H->next=p;
p->name=x->name;
p->num=x->num;
p->score=x->score;
}
}
int main()
{ 
void save(stu *x,stu *H);
stu *H1=new stu;
stu *H2=new stu;
H1->next=NULL;
H2->next=NULL;
char k;
int N=0;
do{
stu *p=new stu;
cout <<"请输入"<<endl;
cin>>p->name;
cin>>p->num;
cin>>p->score;
p->next=H1->next;
H1->next=p; 
cout<<"是否继续输入"<<endl;
cout << endl;
cin>>k;
cout << endl;
N++;
}while(k!='#');
score_ave=score_ave/N;
H2=H2->next;
save(H1,H2);
while(H2!=NULL){
cout<<H2->name<<H2->num<<H2->score<<endl;
H2=H2->next;
}
return 0;
}

img

  • 写回答

4条回答 默认 最新

  • threenewbee 2023-04-04 11:16
    关注

    代码缩进都没有,看着难受,你好歹用个电脑编程,笔记本电脑黄鱼上也就是200块钱

    修改了一下

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    typedef struct stu
    {
        int num;
        string name;
        float score;
        stu *next;
    }; // 需要添加分号
    
    void save(stu *x, stu **H)
    {
        // 定义空链表头
        if (*H == NULL)
        {
            *H = new stu;
            (*H)->next = NULL;
        }
    
        // 动态分配内存并存储符合要求的学生
        if (x->score > score_ave)
        {
            stu *p = new stu;
            p->name = x->name;
            p->num = x->num;
            p->score = x->score;
            p->next = (*H)->next;
            (*H)->next = p;
        }
    }
    
    int main()
    {
        void save(stu *x, stu **H);
        stu *H1 = new stu;
        stu *H2 = NULL;
        H1->next = NULL;
    
        char k;
        int N = 0;
        float score_sum = 0.0;
    
        do{
            stu *p = new stu;
            cout <<"请输入学生姓名,学号和分数(以空格分隔):"<< endl;
            cin >> p->name >> p->num >> p->score;
            p->next = H1->next;
            H1->next = p; 
    
            score_sum += p->score;
            N++;
    
            cout << "是否继续输入?(y/n)" << endl;
            cin >> k;
        } while (k == 'y' || k == 'Y');
    
        score_ave = score_sum / N;
    
        // 存储符合要求的学生
        stu *p = H1->next;
        while (p != NULL)
        {
            save(p, &H2);
            p = p->next;
        }
    
        // 输出结果
        p = H2;
        while (p != NULL)
        {
            cout << p->name << "\t" << p->num << "\t" << p->score << endl;
            p = p->next;
        }
    
        // 释放内存
        p = H1;
        while (p != NULL)
        {
            stu *q = p;
            p = p->next;
            delete q;
        }
        p = H2;
        while (p != NULL)
        {
            stu *q = p;
            p = p->next;
            delete q;
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月5日
  • 已采纳回答 4月5日
  • 创建了问题 4月4日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况