2301_81829019 2024-06-06 11:13 采纳率: 66.7%
浏览 3
已结题

功能主要实现打印所以的正式顾客数据。

客户c=c->next,总出错,但没有提示是什么错误

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define m 20
using namespace std;
//乘客信息链表节点
typedef struct CNode {
    char name[m];//乘客姓名
    int num;//订票数
    int rank;//机舱等级
    CNode *next;
} CNode, *CList; 

CList c;//全局头结点变量

void initCList(CList &cusLinkList) {
    CList q = cusLinkList;
    cusLinkList = (CNode *)malloc(sizeof(CNode));
    cusLinkList->next = NULL;
    c=cusLinkList;
}
//添加正式乘客信息
void addCList(CList &head ,int need, char name[], int grade) {
    CList new1 = (CNode *)malloc(sizeof(CNode));
    if (new1 == NULL) {
        cout << "内存不足" << endl;
        return;
    }
    strcpy(new1->name, name);
    new1->num = need;
    new1->rank = grade;
    new1->next=head;
    // new1->next = head->next;
    // head->next = new1;
}
//出示正式顾客
void printfCList(CList head)
{   //CList c;
    c=head;
    c=c->next;
    printf("客户姓名   舱位等级\n");
    if(c==NULL) 
    printf("没有正式客户\n");
    while (c!=NULL) {
        printf("%4s  %5d\n", c->name,c->rank);
        c = c->next;
    }
    printf("\n\n");
}

功能主要实现打印所以的正式顾客数据。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-06 11:13
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    从您提供的代码中,我注意到几个可能导致错误的地方,并给出相应的建议和修正方案。

    1. 链表初始化: 在initCList函数中,您创建了一个新的节点并将其赋值给cusLinkList,但您没有释放q指针指向的内存。这可能导致内存泄漏。另外,全局变量c应该在函数外部初始化为NULL

      修正后的initCList函数:

      void initCList(CList &cusLinkList) {
          cusLinkList = (CNode *)malloc(sizeof(CNode));
          if (cusLinkList == NULL) {
              cout << "内存不足" << endl;
              return;
          }
          cusLinkList->next = NULL;
          c = cusLinkList;
      }
      
    2. 添加节点: 在addCList函数中,您正确地创建了一个新的节点并设置其属性,但您没有将新节点添加到链表中。您需要将新节点插入到链表的末尾。

      修正后的addCList函数:

      void addCList(CList &head, int need, char name[], int grade) {
          CList new1 = (CNode *)malloc(sizeof(CNode));
          if (new1 == NULL) {
              cout << "内存不足" << endl;
              return;
          }
          strcpy(new1->name, name);
          new1->num = need;
          new1->rank = grade;
          new1->next = NULL;
      
          CList current = head;
          while (current->next != NULL) {
              current = current->next;
          }
          current->next = new1;
      }
      
    3. 打印链表: 在printfCList函数中,您试图打印链表,但您需要确保head参数是正确的链表头节点。另外,您的printf语句中使用了%4s%5d,这可能导致输出格式不正确。您可能需要根据实际的姓名长度和等级数值调整这些格式。

      修正后的printfCList函数:

      void printfCList(CList head) {
          CNode *current = head->next; // 从头节点的下一个节点开始遍历
          printf("客户姓名   舱位等级\n");
          while (current != NULL) {
              printf("%s  %d\n", current->name, current->rank);
              current = current->next;
          }
          printf("\n\n");
      }
      
    4. 全局变量c的使用: 全局变量cprintfCList中被重新赋值为head,这可能会导致在函数调用之间丢失链表的状态。您应该通过参数传递链表的头节点,而不是使用全局变量。

    请注意,这些修正假设您的链表操作逻辑是正确的,并且您的程序中没有其他未显示的错误。在实际应用中,还需要考虑更多的错误处理和边界条件检查。

    至于参考资料,您可以查阅C语言链表操作的教程,例如:

    这些资源可以帮助您更好地理解和实现链表操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码