链表 怎么没有输出。

luohao325 2011-04-15 10:20:34

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_mark;
student *next;
};
student *head,*p,*q;
student * create()
{
char x1[10],x2[10];
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
for(int i=0; i<2; i++)
{
p = (student*)malloc(sizeof(student));
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
int main(int argc, char* argv[])
{
int flag;
head = create();
printf("%s",head->name);// 这里怎么不执行呢?
}


建了个学生成绩的链表,但是
请解惑,主函数的printf("%s",head->name);怎么没作用啊?
...全文
164 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luohao325 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 luohaohahaha 的回复:]

引用楼主 luohao325 的回复:
C/C++ code

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_……
[/Quote]
明白了。
谢谢其他人的回答 。
12楼的解决了关键的问题。
结贴了
luohaohahaha 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 luohao325 的回复:]
C/C++ code

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_mark;
student *next……
[/Quote]
lz 只需要把char x1[10],x2[10];定义为全局变量就好了。

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_mark;
student *next;
};
student *head,*p,*q;
char x1[10],x2[10]; //这样就不会被释放了。
student * create()
{
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
for(int i=0; i<2; i++)
{
p = (student*)malloc(sizeof(student));
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
int main(int argc, char* argv[])
{
int flag;
head = create();
printf("%s",head->name);// 这里怎么不执行呢?
}

lz 试试吧。
luohao325 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 swjtulgj 的回复:]

没有链接浮点运算的库

可以在p = (student*)malloc(sizeof(student));之后来个memset, 或者手动的把几个浮点型的数据设置成0.0
[/Quote]
能帮我把程序修改下 能在main()中把head->name输出吗
luohao325 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 luciferisnotsatan 的回复:]

char x1[10],x2[10];栈上的,出了函数就被回收了。
另外,你循环里每个student怎么都指向x1,x2这两个数组?

name和id也要malloc空间才对
[/Quote]
new 了之后,改为下面这样,还是不能输出。

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_mark;
student *next;
};
student *head;
student * create()
{
char x1[10],x2[10];
student *p,*q;
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
for(int i=0; i<N; i++)
{
p = (student*)malloc(sizeof(student));
p->ID = new char [20];
p->name = new char [20];
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
int main(int argc, char* argv[])
{
int flag;
head = create();
printf("%s",head->name);
return 0;
}
luohao325 2011-04-15
  • 打赏
  • 举报
回复
scanf("%s%s;,x1,x2);//你忘记读了
加这句有什么用呢?
我的main()函数的printf怎么还是没有打印出来、
求大神解释。
swjtulgj 2011-04-15
  • 打赏
  • 举报
回复
试试我说的吧,肯定行,

另外,你没有内存销毁,变量p也不应该设成全局变量啊,问题很多。。
swjtulgj 2011-04-15
  • 打赏
  • 举报
回复
没有链接浮点运算的库

可以在p = (student*)malloc(sizeof(student));之后来个memset, 或者手动的把几个浮点型的数据设置成0.0
luciferisnotsatan 2011-04-15
  • 打赏
  • 举报
回复
char x1[10],x2[10];栈上的,出了函数就被回收了。
另外,你循环里每个student怎么都指向x1,x2这两个数组?

name和id也要malloc空间才对
书虫 2011-04-15
  • 打赏
  • 举报
回复
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
输入完要回车
screwzm 2011-04-15
  • 打赏
  • 举报
回复
student * create()
{
char x1[10],x2[10];
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
scanf("%s%s;,x1,x2);

for(int i=0; i<2; i++)
{
p = (student*)malloc(sizeof(student));
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
screwzm 2011-04-15
  • 打赏
  • 举报
回复
student * create()
{
char x1[10],x2[10];
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
scanf("%s%s;,x1,x2);//你忘记读了
for(int i=0; i<2; i++)
{
p = (student*)malloc(sizeof(student));
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
awsqsh 2011-04-15
  • 打赏
  • 举报
回复
首先一个:函数不知道你要打印哪一个同学的名字。。不是输入了两个同学的信息么?
还有一个,我也不是很懂,printf("%s",head->name);感觉着一句写法就不对。head->name不理解。还请楼下详细解释!!
书虫 2011-04-15
  • 打赏
  • 举报
回复
#define N 3

struct student
{
char *ID,*name;
float CP_mark,MATH_mark,E_mark,PHY_mark;
student *next;
};
student *head,*p,*q;
student * create()
{
char x1[10],x2[10];
head = q =NULL;
printf("分别输入3个学生的姓名、学号、计算机成绩、");
printf("数学成绩、英语成绩、物理成绩!(以空格作间隔输入)\n");
for(int i=0; i<3; i++) // 改成3,不是要输入3个学生的数据吗
{
p = (student*)malloc(sizeof(student));
p->ID = x1;
p->name = x2;
printf("第%d个学生\n",i+1);
scanf("%s%s",p->name,p->ID);
getchar();
scanf("%f%f%f%f",&p->CP_mark,&p->MATH_mark,&p->E_mark,&p->PHY_mark);
p->next = q;
head = p;
q = p;
}
return head;
}
int main(int argc, char* argv[])
{
int flag;
head = create();
printf("%s",head->name);// 这里是可以执行的
}

yukiwang313 2011-04-15
  • 打赏
  • 举报
回复
你的问题真多。。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧