为什么给链表元素初始化,程序就崩溃了?!!!!!

helloDesword 2012-10-21 01:35:18
typedef struct node{
char a[4];
struct node *link;
}NODE;

void print(NODE *p)
{
int i;
for(;p->link!=NULL;p=p->link)
{for(i=0;i<4;i++)printf("%c ",p->a[i]);}
}

void main()
{
NODE *head,*p;
int i;
head=(NODE *)malloc(sizeof(NODE));
p=head;
printf("input the linklist value:\n");

while(1)
{ for(i=0;i<4&&p->a[i]!='\0';i++)scanf("%c",&p->a[i]);
if(p->a[i]=='\0')break;
p=p->link=(NODE *)malloc(sizeof(NODE));
}

p->link=NULL;
printf("these are you input values:\n");
print(head);
}
为什么运行后我输入字符,程序就自己崩溃了?可能while 语句有问题,也或许别的地方。
请大神解答。感激不尽!!!
...全文
193 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndyZhang 2012-10-22
  • 打赏
  • 举报
回复
lz要学会单步调试啊
Q3277631 2012-10-21
  • 打赏
  • 举报
回复
=3=大哥...我不玩了,,,你太多错了...我都郁闷死了...你给不给分我都回复了..
Q3277631 2012-10-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
typedef struct node{
char a[4+1];/*多一个,用来在第26行的i=4时的检测*//*你的结构很有问题,错太多了,我懒得改了,最好重弄一次*/
struct node *link;
}NODE;

void print(NODE *p)
{
int i;
for(;p!=NULL;p=p->link)/*改成p,p->next的话,那第一个呢???*/
{for(i=0;i<4;i++)printf("%c",p->a[i]);}/*如果p->a的值没满怎么办,比如就给a[0],a[1]赋值,这里自己改下吧*/
}





/*还有最大的错误*/
main()
{
NODE *head,*p,*q;
int i;
head=(NODE *)malloc(sizeof(NODE));
p=head;/*正常来说,head如果是头结点的话,不应该赋值的,没错,只是结构问题*/
printf("input the linklist value:\n");
scanf("%c",&p->a[0]);/*先给0赋值*/
while(1)
{ for(i=0;i<4&&p->a[i]!='0'/*=3=我忘记\0用什么来弄了,反正输入0是不行的,所以改了下,
直接用字符0,或者你也可以用EOF,但是不记得怎么输入EOF*/;)
{i++;scanf("%c",&p->a[i]);}/*你p->a[i]还没赋值,里面的值是未定义的,就先测试是不是等于'\0',就这里错了,应该先给0赋值,然后再i++*/
if(p->a[i]=='0')break;/*还有你赋值的i=4时候的那个值没了:比如输入1234560,那么得到的就是12346*/
p=p->link=(NODE *)malloc(sizeof(NODE));
scanf("%c",&p->a[0]);
}

p->link=NULL;
printf("these are you input values:\n");
print(head);
getchar();
getchar();
}
helloDesword 2012-10-21
  • 打赏
  • 举报
回复
对 哦,这里是好像不对的。没初始化。但是我刚刚加了初始化以后,随便输入字符,程序还是自己崩溃了的。
而且把链表的值打印的时候我输入的字符也没出来,都是空的。。。
Q3277631 2012-10-21
  • 打赏
  • 举报
回复
就是说int a[10];if(a[0]==0)的意思.
你a[0]没初始化,没赋值,怎么知道是不是等于0
Q3277631 2012-10-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
typedef struct node{
char a[4];
struct node *link;
}NODE;

void print(NODE *p)
{
int i;
for(;p->link!=NULL;p=p->link)
{for(i=0;i<4;i++)printf("%c ",p->a[i]);}
}

main()
{
NODE *head,*p,*q;
int i;
head=(NODE *)malloc(sizeof(NODE));
p=head;
printf("input the linklist value:\n");
scanf("%c",&p->a[0]);/*先给0赋值*/
while(1)
{ for(i=0;i<4&&p->a[i]!='\0';){i++;scanf("%c",&p->a[i]);}/*你p->a[i]还没赋值,里面的值是未定义的,就先测试是不是等于'\0',就这里错了,应该先给0赋值,然后再i++*/
if(p->a[i]=='\0')break;
p=p->link=(NODE *)malloc(sizeof(NODE));
scanf("%c",&p->a[0]);
}

p->link=NULL;
printf("these are you input values:\n");
print(head);
}

70,026

社区成员

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

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