qq_43713186 2021-01-12 22:04 采纳率: 0%
浏览 14

无法将结构体数据存入链表中

使用vs2019

#include <stdio.h>
#include<string>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 1000
typedef int Status;

typedef struct {
    int no;
    char name[50]; //book's name
    float price;
}Book;
typedef struct {
    Book* elem;
    int length;
}SqList;
Status InitList(SqList& L)
{
    L.elem = new Book[MAXSIZE];
    L.length = 0;
    return OK;
}
Status ListInsert(SqList& L, int i, Book book) {
    if (i<1 || i>L.length + 1)
        return ERROR;
    if (L.length == MAXSIZE)
        return ERROR;
    for (int j = L.length - 1; j > i - 1; j--) {
        L.elem[j + 1] = L.elem[j];
    }
    L.elem[i - 1] = book;
    ++L.length;
    return OK;
}
Book SetBook() {
    Book book;
    int no=0;
    char name[50]="";
    float price=0.0;
    printf("请输入no:\n请输入书名:\n请输入价格:\n");
    scanf_s("%d", &book.no);
    scanf_s("%s", &book.name,50);
    scanf_s("%f", &book.price);
    return book;
}
int main(){
    SqList L;
    InitList(L);
    Book book=SetBook();
    ListInsert(L, 2, book);
    printf("%d", L.elem[2].no);
    return 0;
}

调试的时候book能够得到我输入的值,但是到了ListInsert函数中,book没有赋值给L.elem[i-1],求大佬解答

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 16:19
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在你的程序中,你似乎遇到了一个错误,当尝试在ListInsert函数中将book赋值给L.elem[i-1]时,它并没有成功。这可能是因为你在调用ListInsert函数时,book实际上并未被初始化。

    首先,你需要确保在调用ListInsert之前已经正确地初始化了book。例如,你可以添加以下代码来初始化book

    Book book;
    book.no = 3842150451;
    strcpy(book.name, "请输入书名:");
    float book.price = 0.0;
    

    然后,在调用ListInsert之前,检查book是否已经被正确初始化:

    if (!book.no) {
        printf("no is empty.\n");
        return;
    }
    
    // 更多的检查...
    

    如果所有这些都正确无误,那么问题可能出在ListInsert函数内部。这里是一个修改后的版本,试图解决你的问题:

    Status ListInsert(SqList& L, int i, Book book) {
        if (i < 1 || i > L.length + 1) {
            return ERROR;
        }
    
        if (L.length == MAXSIZE) {
            return ERROR;
        }
    
        for (int j = L.length - 1; j >= i - 1; j--) {
            L.elem[j + 1] = L.elem[j];
        }
    
        L.elem[i - 1] = book;
        ++L.length;
        return OK;
    }
    

    现在,当你尝试插入元素时,book应该已经被正确地初始化,并且应该可以成功地被插入到链表中。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥15 clion的参数提示怎么关闭
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻