C 当我试图计算学生笔记平均值时,程序停止工作
看起来C 当我试图计算学生笔记平均值时,程序停止工作,c,nodes,C,Nodes,看起来node*findAverage函数无法接收指针或head值。我不太擅长结构,所以找不到合适的解决方案。我认为p=head有问题。我只需要一个学生就可以完美地运行程序,但不能增加它 #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { int number; char name[20]; char surname[20]; float Mi
node*findAverage
函数无法接收指针或head
值。我不太擅长结构,所以找不到合适的解决方案。我认为p=head
有问题。我只需要一个学生就可以完美地运行程序,但不能增加它
#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();
}
#包括
#包括
#包括
结构学生{
整数;
字符名[20];
查氏[20];
浮动中期评级;
浮动汇率;
最后一级;
结构学生*下一步;
};
typedef结构学生节点;
节点*头,*新节点;
节点*createList(){
int n=3,k;
节点*head,*p;
对于(k=0;knext=(node*)malloc(sizeof(node));
p=p->next;
}
printf(“输入%d.学号:”,k+1);
scanf(“%d”和(p+k)->数字);
printf(“输入%d.学生姓名:”,k+1);
scanf(“%s”和(p+k)->名称);
printf(“输入%d.学生姓氏:”,k+1);
scanf(“%s”和(p+k)->姓氏;
printf(“输入%d.学生期中成绩:”,k+1);
scanf(“%f”和(p+k)->中期评级);
printf(“输入%d.学生最终成绩:”,k+1);
scanf(“%f”和(p+k)->最终交易);
}
}
节点*findAverage(){
int n=3,k;
节点*p;
p=水头;
对于(k=0;kyearEndGrade=
(p+k)->中期成绩*0.4)+(p+k)->最终成绩*0.6);
printf(“年终成绩为:%.2f\n”,(p+k)->年终成绩);
}
p->next=NULL;
回流头;
}
int main(){
节点*头;
createList();
findAverage();
}
没有输出,只是“student.exe停止工作”。错误
<>编辑:我尝试调试DEV C++,它停止工作太LOL/P>< P>,顺便说一下,你用C语言编码,所以你的语言标签好像是错误的。code>createList()不应声明为单独的局部变量
head
(改用全局变量)。为了避免内存泄漏,必须在最后释放所有分配(请参阅destroy()函数)
struct学生{
整数;
字符名[20];
查氏[20];
浮动中期评级;
浮动汇率;
最后一级;
结构学生*下一步;
};
typedef结构学生节点;
节点*头,*新节点;
无效创建列表(int n){
节点*p;
对于(int k=0;knext=(node*)malloc(sizeof(node));
p=p->next;
}
printf(“输入%d.学号:”,k+1);
scanf(“%d”和(p+k)->数字);
printf(“输入%d.学生姓名:”,k+1);
scanf(“%s”和(p+k)->名称);
printf(“输入%d.学生姓氏:”,k+1);
scanf(“%s”和(p+k)->姓氏;
printf(“输入%d.学生期中成绩:”,k+1);
scanf(“%f”和(p+k)->中期评级);
printf(“输入%d.学生最终成绩:”,k+1);
scanf(“%f”和(p+k)->最终交易);
}
}
节点*findAverage(int n){
节点*p;
p=水头;
对于(int k=0;kyearEndGrade=
(p+k)->中期成绩*0.4)+(p+k)->最终成绩*0.6);
printf(“年终成绩为:%.2f\n”,(p+k)->年终成绩);
}
p->next=NULL;
回流头;
}
无效销毁(){
while(head){
节点*p=头部;
头部=头部->下一步;
自由基(p);
}
}
int main(){
节点*头;
创建列表(3);
findAverage(3);
破坏();
}
打开编译器警告。对于GCC和Clang,这至少是-Wall-Wextra
。这看起来像是发生了崩溃,通常与编译器完全无关。是你的程序停止工作了。你必须开始解决这个问题。更具体地说,您应该在调试器中运行调试构建,以便在崩溃发生时捕获崩溃,并在代码中找到它发生的位置(同时检查崩溃点处涉及的变量的值,以确保它们正常)。提示:您有多少名为head
的不同变量?请记住,局部变量用相同的名称来屏蔽全局变量。BTW,在C++中,不需要<代码> TyPufFrase。使用<代码>结构> <代码>没有<代码> TyPulfF。此外,在C++编程时,请优先考虑运算符<代码>新< /COD>与<代码> MALLC/<代码>。<代码>新< /Calp>运算符调用类/Strut构造函数和<代码> MalOC/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();
}