枫叶之声235
2021-04-16 16:00
采纳率: 100%
浏览 39

有哪位大佬能帮帮看看这几个错误是怎么回事,感激不尽

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
struct student{
    char name[20];
    char num[20];//学号,姓名,性别,楼栋号,宿舍号,出发地(从哪出发
                 //返校),身体状况,并写入文件。
    int _class;
    char sex[4];
    char telephone[20];
    //double a;
    char loudong[20];
    int sushe;

};

struct stu_node{
    struct student data;
    struct stu_node *next;
};

//链表操作函数区域
struct stu_node* buildlist()    //创建链表
{
    struct stu_node* head = (struct stu_node*)malloc(sizeof(struct stu_node));//为表头动态内存分配
    head->next = NULL;            //初始化表头为NULL
    return head;                //返回值为头指针
}

struct stu_node* buildnode(struct student data)//创建学生结点
{
    struct stu_node* newnode = (struct stu_node*)malloc(sizeof(struct stu_node));//新建节点动态内存分配
    newnode->data = data;        //新建学生信息初始化
    newnode->next = NULL;        //新建学生节点的next初始化为NULL
    return newnode;                //返回值为新建的学生节点
}

void insertnode(struct stu_node* head, struct student data)//插入节点,头插法(新建的节点放在最前面)
{
    struct stu_node* newnode = buildnode(data);    //利用创建节点函数创建一个节点
    newnode->next = head->next;                    //头插法将新节点插入链表
    head->next = newnode;
}

/*void deletenode(struct stu_node* head, char* num)//删除给定学号的学生节点
{
    struct stu_node*  deletenodeFront= head;
    struct stu_node*  deletenode = head->next;
    while(strcmp(deletenode->data.num,num)){    //寻找学号为指定学号的节点
        deletenodeFront = deletenode;
        deletenode = deletenode->next;
    }
    deletenodeFront->next = deletenode->next;    //删除实现的操作
    free(deletenode);
}*/
void deletenode(struct stu_node* head,char*name)
{
struct stu_node*  deletenodeFront= head;
    struct stu_node*  deletenode = head->next;
    while(strcmp(deletenode->data.name,name)){    //寻找学号为指定学号的节点
        deletenodeFront = deletenode;
        deletenode = deletenode->next;
    }
    deletenodeFront->next = deletenode->next;    //删除实现的操作
    free(deletenode);
}


//文件操作函数区域
void readstudent(struct stu_node* head, char *filename)//读取文件操作
{
    FILE *read=NULL;
    struct student temp;
    read=fopen(filename,"r");                             //以”只读“的方式打开文件
    if(read == NULL)
        read = fopen(filename,"w+");                    //第一次打开文件以“建立新文本文件进行读\写”的方式打开
    while(fscanf(read,"%s\t%s\t%d\t%s\t%s\t%s\t%d\n",temp.name,temp.num,&temp._class,temp.sex,temp.telephone,temp.loudong,&temp.sushe)!=EOF){
        insertnode(head,temp);//&temp.a
    }
    fclose(read);
    return;//关闭文件
}

void writestudent(struct stu_node* head, char *filename)//写入文件操作
{
    FILE *write=NULL;
    struct stu_node *pHead;
    pHead = head->next;
    write=fopen(filename,"w");                            //以“建文本文件只进行写”的方式打开
    while(pHead){
        fprintf(write,"%s\t%s\t%d\t%s\t%s\t%s\t%d\n",pHead->data.name,pHead->data.num,pHead->data._class,pHead->data.sex,pHead->data.telephone,pHead->data.loudong,pHead->data.sushe);
        pHead = pHead->next;
    }
    fclose(write);    
    return;//关闭文件
}

void printList(struct stu_node *head)
{
    struct stu_node *pMove = head->next;
    printf("姓名    学号    班级    性别     电话      楼栋   宿舍   \n");
    while(pMove){
        printf("%s\t%s\t%d\t%s\t%s\t%s\t%d\n",
        pMove->data.name,pMove->data.num,pMove->data._class,pMove->data.sex,pMove->data.telephone,pMove->data.loudong,pMove->data.sushe);
        pMove = pMove->next; 
    }
    printf("\n");
}

struct node* searchstudent(struct stu_node *head, char *studentname)
{
    struct stu_node *pMove = head->next;
    //&& 短路现象
    while (pMove != NULL&&strcmp(pMove->data.name, studentname))
    {
        pMove = pMove->next;
    }
    return pMove;        //NULL 没找到
}


void menu()
{
    printf("---------------------------------------------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\t1.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.修改信息\n");
    printf("\t\t4.查找信息\n");
    printf("\t\t5.删除信息\n");
    printf("\t\t6.总览信息\n");
    printf("---------------------------------------------\n");
}

struct stu_node *head; 

void keydown()
{
    int userKey = 0;
    struct student userData;
    int sum;
    //double ave_grade;
    //int elx_sum;
    scanf("%d",&userKey);
    switch(userKey)
    {
        case 0:
            printf("-----------【退出系统】------------\n");
            printf("正常退出\n");
            system("pause");
            exit(0);
            break;
        case 1:
            printf("-----------【录入信息】------------\n");
            printf("请输入以下学生信息\n");
            printf("姓名  学号   班级  性别   电话   楼栋   宿舍\n");
            scanf("%s %s %d %s %s %s %d",userData.name,userData.num,&userData._class,userData.sex,userData.telephone,userData.loudong,&userData.sushe);
            insertnode(head,userData);
            break;    
        case 2:
            printf("-----------【浏览信息】------------\n");
            printList(head);
            break;
        case 3:
            printf("-----------【修改信息】------------\n");

        printf("\n\t\t【修改学生信息】\n");  //链表的修改
        printf("\t\t按照姓名修改,请输入要修改学生的姓名\n");
        scanf("%s", userData.name);
        if (searchstudent(head, userData.name) == NULL)
        {
            printf("未找到相关信息,无法修改!\n");
        }
        else
        {
            printf("请输入信息妃子信息(姓名,学号,班级,性别,电话,楼栋,宿舍)\n");
            scanf("%s%s%d%s%s%s%d", searchstudent(head, userData.name)->temp.name,
                searchstudent(head, userData.name)->temp.num,
                searchstudent(head, userData.name)->temp._class,
                searchstudent(head, userData.name)->temp.sex,
                searchstudent(head, userData.name)->temp.telephone,
                searchstudent(head, userData.name)->temp.loudong,
                searchstudent(head, userData.name)->temp.sushe);
                
          writestudent(head,"student");
          printf("修改成功!\n");
        }
        break;
    default:


            break;
        case 4:
            printf("-----------【查找信息】------------\n");
            break;
        case 5:
            printf("-----------【删除信息】------------\n");
            printf("请输入删除学生的姓名\n");
            scanf("%s",userData.name);
            deletenode(head,userData.name);
            break;
        case 6:
            printf("-----------【总览信息】------------\n");
            printf("学生总数\n");
            /*Class_Statisics(head,&sum,&ave_grade,&elx_sum);*/
            printf("%d",sum);
            /*printf("%d\t  %.1lf\t    %d\n",sum,ave_grade,elx_sum);*/ 
            break; 
    }
}
int main()
{    
    head = buildlist();
    readstudent(head,"student");
    while(1){
        menu();
        keydown();
        writestudent(head,"student");
        system("pause");
        system("cls"); 
    }
    return 0;
}
错误提示

--------------------Configuration: xuexin - Win32 Debug--------------------
Compiling...
xuexin.c
C:\Users\ren200119\Desktop\xuexin\xuexin.c(121) : warning C4133: 'return' : incompatible types - from 'struct stu_node *' to 'struct node *'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(180) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(181) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(182) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(183) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(184) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(185) : error C2037: left of 'temp' specifies undefined struct/union 'node'
C:\Users\ren200119\Desktop\xuexin\xuexin.c(186) : error C2037: left of 'temp' specifies undefined struct/union 'node'
执行 cl.exe 时出错.

xuexin.obj - 1 error(s), 0 warning(s)
 

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

5条回答 默认 最新

相关推荐 更多相似问题