c - 当我尝试计算学生笔记平均值时程序停止工作
问题描述
看起来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++,但它也停止工作了大声笑
解决方案
顺便说一句,您正在使用 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();
}
推荐阅读
- kubernetes - Kubernetes Engine集群中节点的外部IP
- python - Plotly:如何绘制多线图?
- c++ - c++入门中数组维度的定义与其他的不同吗?
- lisp - LISP // AutoCAD // 插入块、更改属性值和自定义属性(位置 X、Y;角度..)和绘制线条
- python - tensorflow 是否依赖于特定版本的 protobuf?
- angular - 未捕获的错误:模板解析错误:'mat-label' 不是已知元素:
- c# - 文本框中的自动完成文本
- sql - 传递 SP 的负值
- java - 我是否正确描述了这些实体?
- javascript - 预训练大脑 js 模型