海绵宝宝最爱派大星 2021-06-20 14:57 采纳率: 0%
浏览 29

我把代码放在一起时可以运行,但是我放在devc++的项目里就会出现编译错误

这是我的头文件student.h

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//初始化所有函数
void SystemMenu();//菜单 
void KeyRecive();
void InsertNode();// 插入节点 
struct Node* CreatNode();
struct Node* CreatNewNode(struct Student data);
void CreatNodeList(struct Node* HeadNode, struct Student data); //创建链表 
void deletestudent();//删除信息 
void deletenode(struct Node* headnode, char* name);//删除节点 
struct Node* SearchNode(struct Node* StudentNode, char* name);//
void PrintNode(struct Node* StudentNode);//打印节点 
void PrintList(struct Node* StudentNode);//打印链表 
void ReadFromFile(char* filename, struct Node* StudentNode);//从文件中读取数据 
void SaveFile1(char* filename, struct Node* StudentNode);
struct Node* StudentNode;
char S1[5] = { 's','.','t','x','t' };//?
struct Student {
    char name[20];//名字
    int age;//年龄
    char tel[20];//电话
    char addr[20];//住址
};
struct Node {
    struct Student data;
    struct Node* Next;
};

这是我的主函数文件 main.c

#include"student.h"
int main(void) 
{
    StudentNode = CreatNode();
    ReadFromFile(S1,StudentNode);
    while (1) 
    { 
        SystemMenu();
        KeyRecive();
        system("pause");
        system("cls");    
    }
}
void SystemMenu(){
    printf("-----------------------------学生信息管理系统--------------------------------------\n");
    printf("\t\t\t0.插入信息\n");
    printf("\t\t\t1.浏览信息\n");
    printf("\t\t\t2.删除信息\n");
    printf("\t\t\t3.修改信息\n");
    printf("\t\t\t4.查找信息\n");
    printf("\t\t\t5.退出系统\n");
    printf("-----------------------------------------------------------------------------------\n");

}
void KeyRecive(){
    int x;//我的选择    
    struct Student s;
    scanf("%d", &x);
    switch (x)
    {
    case 0:
        InsertNode();//增加学生信息 
        SaveFile1(S1, StudentNode);
        printf("插入操作执行完成!-------------");
        break;
    case 1:
        printf("\t【浏览信息】\n");
        PrintNode(StudentNode);//输出所有学生的信息 
        printf("浏览操作执行完成--------------");
        break;
    case 2:
        printf("\t【删除信息】\n");
        deletestudent();
        SaveFile1(S1, StudentNode);//删除某个学生的信息 
        printf("删除操作执行完成---------------");
        break;
    case 3:
        printf("\t【更改信息】\n");
        printf("请输入更改的姓名:");
        scanf("%s", &s.name);
        if (SearchNode(StudentNode, s.name) == NULL) {// ?
            printf("未找到相关信息!\n");
        }
        else
        {
            struct Node* s1 = SearchNode(StudentNode, s.name);
            printf("请输入新的学生信息");
            printf("请输入同学姓名,年龄,电话,住址");
            scanf("%s%d%s%s", &s1->data.name, &s1->data.age, &s1->data.tel, &s1->data.addr);
            printf("修改操作执行完成---------------");
            SaveFile1(S1,StudentNode);
        }
        break;
    case 4:
        printf("\t【查找信息】\n");
        printf("请输入查找的姓名:");
        scanf("%s",&s.name);
        if (SearchNode(StudentNode, s.name) == NULL) {
            printf("未找到相关信息!\n");
        }
        else
        {
            PrintList(SearchNode(StudentNode, s.name));
            printf("查找操作执行完成---------------");
        }
        
        break;
    case 5:
        printf("\t【退出系统】\n");
        exit(0);
        break;
    
    default:printf("输入数据有误,重新输入");KeyRecive();
        break;
    }
}
void InsertNode() {//插入函数
    int x,i;
    struct Student S;
    printf("请输入学生个数");
    scanf("%d",&x);
    for (i=1;i<=x; i++) {
        printf("请输入第%d个同学姓名,年龄,电话,住址",i);
        scanf("%s%d%s%s", S.name, &S.age, S.tel, S.addr);
        CreatNodeList(StudentNode,S);
    }
}
struct Node* CreatNode() //建立头节点
{
    struct Node* HeadNode = (struct Node*)malloc(sizeof(struct Node));
    HeadNode->Next = NULL;
    return HeadNode;
}
struct Node* CreatNewNode(struct Student data) {//建立新结点函数
    struct Node* NewNode = (struct Node*)malloc(sizeof(struct Node));
    NewNode->data = data;
    NewNode->Next = NULL;
    return NewNode;
}
void CreatNodeList(struct Node* HeadNode, struct Student data) {//建立新节点并插入数据
    struct Node* NewNode = CreatNewNode(data);
    NewNode->Next = HeadNode->Next;
    HeadNode->Next = NewNode;
 }
void deletestudent() {//删除节点
    char name[10];
    printf("请输入需要删除的学生名字");
    scanf("%s",&name);
    deletenode(StudentNode,name);
}
void deletenode(struct Node* headnode, char *name) {//删除节点
    struct Node* posnode = headnode->Next;
    struct Node* posnodefront = headnode;
    if (posnode == NULL) {
        printf("数据为空,无法删除");

    }
    else
    {
        while (strcmp(posnode->data.name,name)) {
            posnodefront = posnode;
            posnode = posnodefront->Next;
            if (posnode == NULL) 
            {   
                printf("未找到指定位置,无法删除"); 
                return; 
            }
        }
        posnodefront->Next = posnode->Next;
        free(posnode);
    }
}
struct Node* SearchNode(struct Node* StudentNode, char* name) 
{//查找节点
    struct Node* pMove = StudentNode->Next;
    if (pMove == NULL) 
    { 
        printf("未找到该学生");
        return(pMove);
    }
    else
    {
        while (strcmp(pMove->data.name, name)) 
        {
            pMove = pMove->Next;
            if (pMove == NULL)break;
        }
        return pMove;
    }
}
void PrintList(struct Node* StudentNode) 
{//打印单个节点
    printf("姓名\t年龄\t电话\t住址\n");
    printf("%s\t%d\t%s\t%s\n",StudentNode->data.name,StudentNode->data.age,StudentNode->data.tel,StudentNode->data.addr);
}
void PrintNode(struct Node* StudentNode)
{//浏览信息
    struct Node* pow = StudentNode->Next;
    printf("姓名\t年龄\t电话\t住址\n");
    while(pow)
    {
        printf("%s\t%d\t%s\t%s\n",pow->data.name,pow->data.age,pow->data.tel,pow->data.addr);
        pow = pow->Next;
    }
}
void ReadFromFile(char *filename,struct Node* StudentNode)
{
    FILE* fp = fopen(filename, "r");
    if (fp == NULL) 
    {
        fp = fopen(filename, "w");
    }
    struct Student data;
    while (fscanf(fp, "%s\t%d\t%s\t%s\n", &data.name, &data.age,&data.tel, &data.addr) != EOF) 
    {
        CreatNodeList(StudentNode, data);
        memset(&data, 0, sizeof(data));
    }
    fclose(fp);
}
void SaveFile1(char* filename, struct Node* StudentNode) 
{
    FILE* fp = fopen(filename,"w");
    struct Node* pow = StudentNode->Next;
    while (pow) 
    {
        fprintf(fp,"%s\t%d\t%s\t%s\n", pow->data.name, pow->data.age, pow->data.tel, pow->data.addr);
        pow = pow->Next;
    }
    fclose(fp);
}

当我在devc++的项目里运行时总是出现编译错误,错误如下:

这个该怎么改?

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-16 17:43
    关注

    参考GPT和自己的思路:

    根据你提供的错误信息,可以看到是在student.h头文件中的结构体定义出现了问题。具体来说,是结构体Node中的成员Next的类型定义出现了错误,这是因为Next的类型定义成了struct Node*,实际上应该是struct Node*。

    因此,你需要将student.h头文件中的struct Node*修改为struct Node*,保存后重新运行项目即可解决问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物