SKY朱长 发表于 2019-3-16 01:01:39

求助呀!!1为什么在VS里会说我的poi类型不兼容呀

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TSIZE 20

typedef struct note {
        char name;//学生姓名
        char number;//学生学号
        double chinese;//语文成绩
        double english;//英语成绩
        double math;//数学成绩
        struct Student * next;//定义结构指针,形成链表
       
}Student;//定义学生类型结构,储存学生信息

void dele(Student * poi);//删除节点
void plus(Student * poi);//增加节点
void show(Student * poi);//显示学生信息
void frees(Student * poi);//清理内存
int main(void)
{
        int a;
        char copy;
        Student * head = NULL;
        Student * currect,* prev,*end;//声明指针
        printf("请问要执行哪项操作:(输入对应编号)\n");
        printf("1.输入学生信息   2.删除指定学生信息\n");
        printf("3.添加学生信息   4.显示学生信息\n");
        printf("5.退出程序\n");
        scanf("%d",&a);
        while(a != 5)
        {
                switch (a)//使用switch让用户进行选择使用
                {
                        case 1://让用户输入学生信息
                                        printf("学生姓名\t学生学号\t语文成绩\t数学成绩\t英语成绩(输入ctrl+z退出)\n");
                                        while(scanf("%s",copy) != EOF&&copy != '\0')
                                        {
                                        currect = (Student *) malloc(sizeof(Student));
                                        if(head == NULL)
                                          head = currect;
                                        else
                                          prev->next = currect;
                                        currect->next = NULL;
                                        end = currect;
                                        strcpy(currect->name,copy);
                                        scanf("%s%lf%lf%lf",currect->number,&currect->chinese,&currect->math,&currect->english);
                                        while(getchar() != '\n')
                                          continue;
                                        prev = currect;
                                  }
                                  printf("请问要执行哪项操作:(输入对应编号)\n");
                      printf("1.输入学生信息   2.删除指定学生信息\n");
                      printf("3.添加学生信息   4.显示学生信息\n");
                      printf("5.退出程序\n");
                      scanf("%d",&a);
                                break;
                        case 2://让用户删除指定信息
                                dele(head);
                                printf("请问要执行哪项操作:(输入对应编号)\n");
                                scanf("%d",&a);
                                break;
                        case 3://让用户增加信息
                                plus(end);
                                printf("请问要执行哪项操作:(输入对应编号)\n");
                                scanf("%d",&a);
                                break;
                        case 4://显示信息
                                show(head);
                                printf("请问要执行哪项操作:(输入对应编号)\n");
                                scanf("%d",&a);
                                break;
                        case 5://结束使用
                                printf("谢谢使用\n");
                                frees(head);
                                break;
                               
                }
        }
        frees(head);//清理内存
        return 0;
}

void dele(Student * poi)//定义删除节点函数
{
        Student * find, * de,*save;
        char num;
        printf("请输入要删除信息的学生学号\n");
        scanf("%s",&num);
        while(getchar() != '\n')
                continue;
        de = poi;
        save = poi;
        while(strcmp(num,de->number))
        {
                find = de;
                de = de->next;
        }
        if(poi == de)
           poi = de->next;
        else
           find->next = de->next;
        free(de);
}

void plus(Student * poi)//定义增加节点函数
{
        printf("请输入学生信息\n");
        Student * find, *over;
        find = (Student *) malloc(sizeof(Student));
        poi->next = find;
        scanf("%s%s%lf%lf%lf",find->name,find->number,&find->chinese,&find->math,&find->english);
        find->next = NULL;
}
void show(Student * poi)//定义显示函数
{
        while(poi != NULL)
        {
          printf("%s\t%s\t%0.2lf\t%0.2lf\t%0.2lf\n",poi->name,poi->number,poi->chinese,poi->math,poi->english);
          poi = poi->next;
    }
}
void frees(Student * poi)//定义清理内存函数
{
        Student * save;
        save = poi;
        while(poi != NULL)
        {
                save = poi;
                poi = poi->next;
                free(save);
        }
}
{:10_266:}

SKY朱长 发表于 2019-3-16 01:03:49

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TSIZE 20

typedef struct note {
      char name;//学生姓名
      char number;//学生学号
      double chinese;//语文成绩
      double english;//英语成绩
      double math;//数学成绩
      struct Student * next;//定义结构指针,形成链表
      
}Student;//定义学生类型结构,储存学生信息

void dele(Student * poi);//删除节点
void plus(Student * poi);//增加节点
void show(Student * poi);//显示学生信息
void frees(Student * poi);//清理内存
int main(void)
{
      int a;
      char copy;
      Student * head = NULL;
      Student * currect,* prev,*end;//声明指针
      printf("请问要执行哪项操作:(输入对应编号)\n");
      printf("1.输入学生信息   2.删除指定学生信息\n");
      printf("3.添加学生信息   4.显示学生信息\n");
      printf("5.退出程序\n");
      scanf("%d",&a);
      while(a != 5)
      {
                switch (a)//使用switch让用户进行选择使用
                {
                        case 1://让用户输入学生信息
                                        printf("学生姓名\t学生学号\t语文成绩\t数学成绩\t英语成绩(输入ctrl+z退出)\n");
                                        while(scanf("%s",copy) != EOF&&copy != '\0')
                                        {
                                        currect = (Student *) malloc(sizeof(Student));
                                        if(head == NULL)
                                          head = currect;
                                        else
                                          prev->next = currect;
                                        currect->next = NULL;
                                        end = currect;
                                        strcpy(currect->name,copy);
                                        scanf("%s%lf%lf%lf",currect->number,&currect->chinese,&currect->math,&currect->english);
                                        while(getchar() != '\n')
                                          continue;
                                        prev = currect;
                                    }
                                    printf("请问要执行哪项操作:(输入对应编号)\n");
                        printf("1.输入学生信息   2.删除指定学生信息\n");
                        printf("3.添加学生信息   4.显示学生信息\n");
                        printf("5.退出程序\n");
                        scanf("%d",&a);
                              break;
                        case 2://让用户删除指定信息
                              dele(head);
                              printf("请问要执行哪项操作:(输入对应编号)\n");
                              scanf("%d",&a);
                              break;
                        case 3://让用户增加信息
                              plus(end);
                              printf("请问要执行哪项操作:(输入对应编号)\n");
                              scanf("%d",&a);
                              break;
                        case 4://显示信息
                              show(head);
                              printf("请问要执行哪项操作:(输入对应编号)\n");
                              scanf("%d",&a);
                              break;
                        case 5://结束使用
                              printf("谢谢使用\n");
                              frees(head);
                              break;
                              
                }
      }
      frees(head);//清理内存
      return 0;
}

void dele(Student * poi)//定义删除节点函数
{
      Student * find, * de,*save;
      char num;
      printf("请输入要删除信息的学生学号\n");
      scanf("%s",&num);
      while(getchar() != '\n')
                continue;
      de = poi;
      save = poi;
      while(strcmp(num,de->number))
      {
                find = de;
                de = de->next;
      }
      if(poi == de)
         poi = de->next;
      else
         find->next = de->next;
      free(de);
}

void plus(Student * poi)//定义增加节点函数
{
      printf("请输入学生信息\n");
      Student * find, *over;
      find = (Student *) malloc(sizeof(Student));
      poi->next = find;
      scanf("%s%s%lf%lf%lf",find->name,find->number,&find->chinese,&find->math,&find->english);
      find->next = NULL;
}
void show(Student * poi)//定义显示函数
{
      while(poi != NULL)
      {
          printf("%s\t%s\t%0.2lf\t%0.2lf\t%0.2lf\n",poi->name,poi->number,poi->chinese,poi->math,poi->english);
          poi = poi->next;
    }
}
void frees(Student * poi)//定义清理内存函数
{
      Student * save;
      save = poi;
      while(poi != NULL)
      {
                save = poi;
                poi = poi->next;
                free(save);
      }
}

jackz007 发表于 2019-3-16 03:35:06

本帖最后由 jackz007 于 2019-3-16 03:37 编辑

ttypedef struct note {
      char name      ;
      char number    ;
      double chinese      ;
      double english      ;
      double math         ;
      struct Student * next ;// 错误在这里,正确的写法是: struct node * next ;
} Student                     ;

SKY朱长 发表于 2019-3-16 07:13:02

jackz007 发表于 2019-3-16 03:35


可以了b( ̄▽ ̄)d ,能告诉我是为什么吗

jackz007 发表于 2019-3-16 10:11:04

SKY朱长 发表于 2019-3-16 07:13
可以了b( ̄▽ ̄)d ,能告诉我是为什么吗

   规则,遵守就好了。

jackz007 发表于 2019-3-17 21:14:27

SKY朱长 发表于 2019-3-16 07:13
可以了b( ̄▽ ̄)d ,能告诉我是为什么吗

    既然你问题解决了,是不是该结束求助了?

Break_L 发表于 2019-3-17 22:38:07

SKY朱长 发表于 2019-3-16 07:13
可以了b( ̄▽ ̄)d ,能告诉我是为什么吗

typedef是自定义类型,也就是说在你的代码中原本的类型本来是struct note;只不过你通过typedef将Student定义为struct note类型,那么你可以理解为在struct note里面根本不知道自己是Student类型了,也就是说你在里面用Student它不认识,所以你应该用它本来的原类型note

SKY朱长 发表于 2019-3-18 21:44:16

Break_L 发表于 2019-3-17 22:38
typedef是自定义类型,也就是说在你的代码中原本的类型本来是struct note;只不过你通过typedef将Student ...

懂了,谢谢
页: [1]
查看完整版本: 求助呀!!1为什么在VS里会说我的poi类型不兼容呀