m0_63999697 2022-03-02 17:17 采纳率: 93.5%
浏览 31
已结题

动态链表 查找学生信息 这个查找的函数错在哪里了

动态链表:查找
问题描述
请设计一个简单的学生成绩管理系统,要求系统实现以下功能:
学生信息包括学号、姓名、性别、语文、数学、英语。
插入学生信息:
Insert id name sex x y z 其中的参数分别为学号、姓名、性别、三门课的成绩,成绩为浮点数。
输出所有学生信息:
List
按照插入的顺序输出所有学生的信息,每行一位学生的信息。每行的格式如下:
id name sex x y z
数据之间有一个空格分隔,成绩保留1位小数。
查找学生信息:
Find id
查找学号为id的学生信息。
退出程序:
Quit或者Exit
输入
输入有多行,每行一条指令,指令格式如下
Insert id name sex x y z
插入学生信息,分别为学号、姓名、性别和三门课的成绩。
List
输出所有学生信息。
Find id
查找学号为id的学生信息。
Quit或者Exit
输出"Good bye!"后结束程序。
输出
输出有多行,对应命令的输出如下:
Insert id name sex x y z
插入后在先在单独的一行中输出"Insert:",然后在第二行中显示学生信息,数据之间用一个空格分开,成绩保留1位小数。
List
第一行输出"List:",接下来按照插入的顺序输出所有学生的信息,每行一位学生的信息。每行的格式如下:
id name sex x y z
数据之间用一个空格分开,成绩保留1位小数。
Find id
第一行显示”Find:",第二行显示格式如下:
如果找到学号为id的学生,则在单独一行中显示学生纤细,格式如List。否则在单独一行显示"Failed"。
Quit或者Exit
在单独一行中输出"Good bye!"后结束程序。
输入样列
Insert 0911001 zhangsan F 87 78 65
Insert 0911002 zhaoliu F 97 90 55
Insert 0911003 Lisi F 77 72 55
Find 0911004
Insert 0911004 Wangwu F 68 56 95
Find 0911004
List
Quit
输出样例
Insert:
0911001 zhangsan F 87.0 78.0 65.0
Insert:
0911002 zhaoliu F 97.0 90.0 55.0
Insert:
0911003 Lisi F 77.0 72.0 55.0
Find:
Failed
Insert:
0911004 Wangwu F 68.0 56.0 95.0
Find:
0911004 Wangwu F 68.0 56.0 95.0
List:
0911001 zhangsan F 87.0 78.0 65.0
0911002 zhaoliu F 97.0 90.0 55.0
0911003 Lisi F 77.0 72.0 55.0
0911004 Wangwu F 68.0 56.0 95.0
Good bye!

#include<bits/stdc++.h>
using namespace std;
typedef struct Student{
    char id[20];
    char name[20];
    char sex[2];
    double x,y,z;
    struct Student *next;
}Student;
void inputSingle(Student *s)
{
    int j;
    scanf("%s %s %s",s->id,s->name,s->sex);
    scanf("%lf %lf %lf",&s->x,&s->y,&s->z);
}
void outputSingle(Student *s)
{
    int j;
    printf("%s %s %s ",s->id,s->name,s->sex);
    printf("%.1f %.1f %.1f\n",s->x,s->y,s->z);
}
Student* createList()
{
    Student *L;
    L=(Student *)malloc(sizeof(Student));
    L->next=NULL;
    return L;
}
void insertTail(Student *L,Student *s)
{
    Student *pre,*p;
    pre=L;
    p=L->next;
    while(p!=NULL){
        pre=p;
        p=p->next;
    }
    s->next=pre->next;
    pre->next=s;
}
void outputList(Student *L)
{
    Student *p;
    p=L->next;
    while(p!=NULL){
        outputSingle(p);
        p=p->next;
    }
}
void Find(Student *L,char id[])
{
    Student *pre,*p;
    pre=L;
    p=L->next;
    while(p!=NULL&&p->id!=id){
        pre=p;
        p=p->next;
    }
    if(p==NULL){
        puts("Failed");
    }
    else{
        outputSingle(p);
    }
} 
int main()
{
    string order;
    Student *L,*s;
    L=createList();
    char id[20];
    while(1){
        cin>>order;
        if(order=="Insert"){
            puts("Insert:");
            s=(Student *)malloc(sizeof(Student));
            inputSingle(s);
            outputSingle(s);
            insertTail(L,s);
        }
        else if(order=="List"){
            puts("List:");
            outputList(L);
        }
        else if(order=="Find"){
            puts("Find:");
            Find(L,id);
        }
        else{
            printf("Good bye!\n");
            break;
        }
    }
    return 0;
}

测试到Find就会直接输出good bye然后结束了。。不知道为什么

  • 写回答

1条回答 默认 最新

  • 谛凌 2022-03-02 17:29
    关注

    没看错的话,71行的char id[20];
    这个id没有被初始化过
    并且55行,想要判断id是否相等,因为它是字符数组,所以不能用等于或者不等于判断,需要用string.h的strcmp进行字符串的比较

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。