Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我试图计算学生笔记平均值时,程序停止工作_C_Nodes - Fatal编程技术网

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/ >。这里也看不到C++中编写的任何代码。这是纯C
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();
}