首页 > 解决方案 > 当我尝试计算学生笔记平均值时程序停止工作

问题描述

看起来node* findAverage函数无法接收指针或head值。我不太擅长结构,所以我找不到合适的解决方案。我认为 有什么问题p=head。我可以只用 1 个学生完美地运行程序,但不能增加它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student {
  int number;
  char name[20];
  char surname[20];
  float MidTermGrade;
  float FinalGrade;
  float yearEndGrade;
  struct student *next;
};

typedef struct student node;
node *head, *newNode;

node *createList() {
  int n = 3, k;
  node *head, *p;

  for (k = 0; k < n; k++) {
    if (k == 0) {
      head = (node *)malloc(sizeof(node));
      p = head;
    }

    else {
      p->next = (node *)malloc(sizeof(node));
      p = p->next;
    }

    printf("Enter %d. student number: ", k + 1);
    scanf("%d", &(p + k)->number);
    printf("Enter %d. student name: ", k + 1);
    scanf("%s", &(p + k)->name);
    printf("Enter %d. student surname: ", k + 1);
    scanf("%s", &(p + k)->surname);
    printf("Enter %d. student Mid Term Grade: ", k + 1);
    scanf("%f", &(p + k)->MidTermGrade);
    printf("Enter %d. student Final Grade: ", k + 1);
    scanf("%f", &(p + k)->FinalGrade);
  }
}

node *findAverage() {
  int n = 3, k;
  node *p;
  p = head;

  for (k = 0; k < n; k++) {
    printf("control point");
    (p + k)->yearEndGrade =
        ((p + k)->MidTermGrade * 0.4) + ((p + k)->FinalGrade * 0.6);

    printf("Year-End Grade is: %.2f\n", (p + k)->yearEndGrade);
  }

  p->next = NULL;
  return head;
}

int main() {
  node *head;

  createList();

  findAverage();
}

没有输出,只是“student.exe 停止工作”。错误。

编辑:我尝试调试 dev c++,但它也停止工作了大声笑

标签: cnodes

解决方案


顺便说一句,您正在使用 C 语言进行编码,因此您的语言标签似乎是错误的。createList()不应将其声明为单独的局部变量head(改用全局变量)。为避免内存泄漏,所有分配都必须在最后释放(参见 destroy() 函数)

struct student {
    int number;
    char name[20];
    char surname[20];
    float MidTermGrade;
    float FinalGrade;
    float yearEndGrade;
    struct student *next;
};

typedef struct student node;
node *head, *newNode;

void createList(int n) {
    node *p; 
    for (int k = 0; k < n; k++) {
        if (k == 0) {
            head = (node*)malloc(sizeof(node));
            p = head;
        }
        else {
            p->next = (node*)malloc(sizeof(node));
            p = p->next;
        }
        printf("Enter %d. student number: ", k + 1);
        scanf("%d", &(p + k)->number);
        printf("Enter %d. student name: ", k + 1);
        scanf("%s", &(p + k)->name);
        printf("Enter %d. student surname: ", k + 1);
        scanf("%s", &(p + k)->surname);
        printf("Enter %d. student Mid Term Grade: ", k + 1);
        scanf("%f", &(p + k)->MidTermGrade);
        printf("Enter %d. student Final Grade: ", k + 1);
        scanf("%f", &(p + k)->FinalGrade);
    }
}

node *findAverage(int n) {
    node *p;
    p = head;
    for (int k = 0; k < n; k++) {
        printf("control point");
        (p + k)->yearEndGrade =
            ((p + k)->MidTermGrade * 0.4) + ((p + k)->FinalGrade * 0.6);

        printf("Year-End Grade is: %.2f\n", (p + k)->yearEndGrade);
    }
    p->next = NULL;
    return head;
}

void destroy() {
    while (head) {
        node *p = head;
        head = head->next;
        free(p);
    }
}

int main() {
    node *head;
    createList(3);
    findAverage(3);
    destroy();
}

推荐阅读