这个程序用C++运行为什么不出结果呢?

来源:百度知道 编辑:UC知道 时间:2024/05/11 21:35:48
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode;
int initlist(Lnode *L){
Lnode *p,*r;
int i;
L=(Lnode*)malloc(sizeof(Lnode));
if(!L) exit(1);
L->next=NULL;
r=L;
for(i=1;i<=10;i++){
p=(Lnode*)malloc(sizeof(Lnode));
scanf("%d",&p->data);
r->next=p;r=p;
}
r->next=NULL;
return;
}
void printlist(Lnode *L){
int e[10],i;
Lnode *p;
p=L;
for(i=0;i<10;i++){
e[i]=p->data;
printf("%d",e[i]);
p++;
}
}
main(){
int n;
Lnode L;
initlist(&L);
printlist(&L);
return(0);
}

楼上“xjumabin”犯概念性错误,scanf("%d",p)将导致不可预知的内存错误。

你的代码我大致改了下,测试的运行结果:

Enter 10 numbers:
1
2
3
4
5
6
7
8
9
0
1 2 3 4 5 6 7 8 9 0
Press any key to continue

--------------------

VC6,Win-TC2调试通过。代码如下,仔细看看注释:

-------------

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

#define MAXNODE 10 // 链表长度,至少为1

typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
/*
} Lnode; // 有歧义,最好不要把struct Lnode重命名为Lnode,建议重命名为NODE,以便区别
*/
} NODE, *LIST;

int initlist(LIST L)
{
NODE *p=NULL,*r=L;
int i=0;
/*
L=(LIST)malloc(sizeof(NODE)); // 不能在这里改变L的值,应该在main函数中申请。
*/
if(!L) exit(1);
scanf("%d",&L->data); // 首元素的data在这里输入
L->next=NULL;