我需要将指针传递给函数,但它不起作用输出为空。
我在1周前在我的大学学习这个指针,但它很困惑。
谢谢你的进步。下面的代码和输出:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo{
char CourseID[10];
char CourseName[50];
float score;
struct Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo *next;
}course;
void GetData(course *newnode,course *root,course *last)
{
char CourseID[10],CourseName[50];
float score;
FILE *input;
input = fopen("Course.txt","r");
fscanf(input,"%s %s %f",&CourseID,&CourseName,&score);
while(!feof(input))
{
newnode = (course*)malloc(sizeof(course));
strcpy(newnode->CourseID,CourseID);
strcpy(newnode->CourseName,CourseName);
newnode->score = score;
newnode->next = NULL;
if(root == NULL)
{
root = newnode;
last = newnode;
}
else
{
last->next = newnode;
last = newnode;
}
fscanf(input,"%s %s %f",&CourseID,&CourseName,&score);
}
}
void checkScore(course *run,course *root)
{
run = root;
while(run != NULL)
{
if(run->score >= 80)
{
printf("Course ID = %s\n",run->CourseID);
printf("Course Name = %s\n",run->CourseName);
printf("Your grade of this Course is = ");
if(run->score < 50)
{
printf("D");
}
else if(run->score < 60)
{
printf("C");
}
else if(run->score < 70)
{
printf("B");
}
else
{
printf("A");
}
}
run = run->next;
}
}
int main()
{
course *root = NULL,*last,*newnode,*run;
int i,cnt;
GetData(newnode,root,last);
checkScore(run,root);
return 0;
}
这是输出
答案 0 :(得分:1)
首先,这个问题看起来相当荒谬,特别是结构名称为“Nooooooooooooooooooooooo”,这可能是浪费人们试图回答的时间。
其次,你的术语很遥远。将指针传递给结构与指向函数的指针非常不同!
但是在您的代码中,主要问题在于此行:
void GetData(course *newnode,course *root,course *last)
你真的知道你在这里有什么吗?好吧,你有3个本地指针,当你的程序启动时都是null或未初始化。然后在你的函数中,malloc()一些ram并使用这些本地指针来存储这个分配的内存块的地址。但是,您似乎并不了解这些是您传入的指针的本地副本,因此当您的函数结束时,它们将在堆栈展开时消失。
如果你想要返回你分配给调用函数的内存地址,你需要传递指针的地址,然后让你的函数进行双重解引用。
像这样......
course *c;
GetData(&c);
void GetData(course **c)
{
*c = (course*)malloc(sizeof(course));
...
...
}