user-0 提问: 数据结构！！！基础

回复:
user: user-1
content: 引用 9 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。  特别佩服牛人们读人家代码还能找到错误。。。

user: user-0
content: 引用 11 楼 paschen的回复:[quote=引用 8 楼 xinye1230 的回复:] [quote=引用 7 楼 user-5 的回复:] 把改过后的代码和报错信息一起粘 贴过来，才能帮你 #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList void CreateList_L(LinkList &L,int n) {     int i;     LinkList p;     L=(LinkList)malloc(sizeof(LNode));     L->next=NULL;     for(i=n;i>0;--i)     {         p=(LinkList)malloc(sizeof(LNode));         scanf("%d",&p->data); 		getchar();         L->next=p->next;         p->next=L;     } } Status GetElem_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p;     p=L->next;j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return ERROR;     e=p->data;     return OK; } Status ListInsert_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p,s;     p=L;j=0;     while(p&&j<i-1)     {         p=p->next;         ++j;     }     if(!p||j>i-1)         return ERROR;     s=(LinkList)malloc(sizeof(LNode));     s->data=e;     s->next=p->next;     p->next=s;     return OK; } Status ListDelete_L(LinkList &L,int i,ElemType &e) {     int j;     LinkList p,q;     p=L;j=0;     while(p->next&&j<i-1)     {         p=p->next;         ++j;     }     if(!(p->next)||j>i-1)         return ERROR;     q=p->next;     p->next=q->next;     e=q->data;     free(q);     return OK;   }   void main() {     LinkList p,L;     int n;     scanf("%d",&n); 	getchar();     CreateList_L(L,n);     p=L->next;     while(p)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n");     int i;     ElemType e;     scanf("%d",&i); 	getchar();     GetElem_L(L,i,e);     printf("%d\n",e);     scanf("%d %d",&i,&e); 	getchar();     ListInsert_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n");     scanf("%d",&i); 	getchar();     ListDelete_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n"); } e:\c\pp.c(17) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(17) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(17) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(17) : error C2059: syntax error : '&' e:\c\pp.c(17) : error C2059: syntax error : ')' e:\c\pp.c(32) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(32) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(32) : error C2059: syntax error : '&' e:\c\pp.c(32) : error C2059: syntax error : ')' e:\c\pp.c(47) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(47) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(47) : error C2059: syntax error : '&' e:\c\pp.c(47) : error C2059: syntax error : ')' e:\c\pp.c(65) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(65) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(65) : error C2059: syntax error : '&' e:\c\pp.c(65) : error C2059: syntax error : ')' e:\c\pp.c(91) : warning C4013: 'CreateList_L' undefined; assuming extern returning int e:\c\pp.c(99) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(100) : error C2275: 'ElemType' : illegal use of this type as an expression         e:\c\pp.c(11) : see declaration of 'ElemType' e:\c\pp.c(100) : error C2146: syntax error : missing ';' before identifier 'e' e:\c\pp.c(100) : error C2065: 'e' : undeclared identifier e:\c\pp.c(101) : error C2065: 'i' : undeclared identifier e:\c\pp.c(103) : warning C4013: 'GetElem_L' undefined; assuming extern returning int e:\c\pp.c(107) : warning C4013: 'ListInsert_L' undefined; assuming extern returning int e:\c\pp.c(115) : warning C4013: 'ListDelete_L' undefined; assuming extern returning int 执行 cl.exe 时出错.  pp.obj - 1 error(s), 0 warning(s)  这是我学数据结构的第一个代码   我自己也不知道是什么意思，完全不懂[/quote]   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList  这句后面少了分号[/quote] 谢谢，我知道了。

user: user-0
content: 引用 10 楼 小灸舞的回复:typedef这里最后少了个分号，导致一坨错误 跑起来以后，如果还有错误可以单步调试。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;  typedef struct LNode{ 	ElemType data; 	struct LNode *next; }LNode, *LinkList; void CreateList_L(LinkList &L, int n) { 	int i; 	LinkList p; 	L = (LinkList)malloc(sizeof(LNode)); 	L->next = NULL; 	for (i = n; i > 0; --i) 	{ 		p = (LinkList)malloc(sizeof(LNode)); 		scanf("%d", &p->data); 		getchar(); 		L->next = p->next; 		p->next = L; 	} } Status GetElem_L(LinkList L, int i, ElemType &e) { 	int j; 	LinkList p; 	p = L->next; j = 1; 	while (p&&j<i) 	{ 		p = p->next; 		++j; 	} 	if (!p || j>i) 		return ERROR; 	e = p->data; 	return OK; } Status ListInsert_L(LinkList L, int i, ElemType &e) { 	int j; 	LinkList p, s; 	p = L; j = 0; 	while (p&&j<i - 1) 	{ 		p = p->next; 		++j; 	} 	if (!p || j>i - 1) 		return ERROR; 	s = (LinkList)malloc(sizeof(LNode)); 	s->data = e; 	s->next = p->next; 	p->next = s; 	return OK; } Status ListDelete_L(LinkList &L, int i, ElemType &e) { 	int j; 	LinkList p, q; 	p = L; j = 0; 	while (p->next&&j<i - 1) 	{ 		p = p->next; 		++j; 	} 	if (!(p->next) || j>i - 1) 		return ERROR; 	q = p->next; 	p->next = q->next; 	e = q->data; 	free(q); 	return OK;  }  void main() { 	LinkList p, L; 	int n; 	scanf("%d", &n); 	getchar(); 	CreateList_L(L, n); 	p = L->next; 	while (p) 	{ 		printf("%d ", p->data); 		p = p->next; 	} 	printf("\n"); 	int i; 	ElemType e; 	scanf("%d", &i); 	getchar(); 	GetElem_L(L, i, e); 	printf("%d\n", e); 	scanf("%d %d", &i, &e); 	getchar(); 	ListInsert_L(L, i, e); 	for(p = L->next; p; p = p->next) 	{ 		printf("%d ", p->data); 	} 	printf("\n"); 	scanf("%d", &i); 	getchar(); 	ListDelete_L(L, i, e); 	for (p = L->next; p; p = p->next) 	{ 		printf("%d ", p->data); 	} 	printf("\n"); }  谢谢，对我太有帮助了

user: user-2
content: 引用 8 楼 xinye1230 的回复:[quote=引用 7 楼 user-5 的回复:] 把改过后的代码和报错信息一起粘 贴过来，才能帮你 #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList void CreateList_L(LinkList &L,int n) {     int i;     LinkList p;     L=(LinkList)malloc(sizeof(LNode));     L->next=NULL;     for(i=n;i>0;--i)     {         p=(LinkList)malloc(sizeof(LNode));         scanf("%d",&p->data); 		getchar();         L->next=p->next;         p->next=L;     } } Status GetElem_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p;     p=L->next;j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return ERROR;     e=p->data;     return OK; } Status ListInsert_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p,s;     p=L;j=0;     while(p&&j<i-1)     {         p=p->next;         ++j;     }     if(!p||j>i-1)         return ERROR;     s=(LinkList)malloc(sizeof(LNode));     s->data=e;     s->next=p->next;     p->next=s;     return OK; } Status ListDelete_L(LinkList &L,int i,ElemType &e) {     int j;     LinkList p,q;     p=L;j=0;     while(p->next&&j<i-1)     {         p=p->next;         ++j;     }     if(!(p->next)||j>i-1)         return ERROR;     q=p->next;     p->next=q->next;     e=q->data;     free(q);     return OK;   }   void main() {     LinkList p,L;     int n;     scanf("%d",&n); 	getchar();     CreateList_L(L,n);     p=L->next;     while(p)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n");     int i;     ElemType e;     scanf("%d",&i); 	getchar();     GetElem_L(L,i,e);     printf("%d\n",e);     scanf("%d %d",&i,&e); 	getchar();     ListInsert_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n");     scanf("%d",&i); 	getchar();     ListDelete_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n"); } e:\c\pp.c(17) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(17) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(17) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(17) : error C2059: syntax error : '&' e:\c\pp.c(17) : error C2059: syntax error : ')' e:\c\pp.c(32) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(32) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(32) : error C2059: syntax error : '&' e:\c\pp.c(32) : error C2059: syntax error : ')' e:\c\pp.c(47) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(47) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(47) : error C2059: syntax error : '&' e:\c\pp.c(47) : error C2059: syntax error : ')' e:\c\pp.c(65) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(65) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(65) : error C2059: syntax error : '&' e:\c\pp.c(65) : error C2059: syntax error : ')' e:\c\pp.c(91) : warning C4013: 'CreateList_L' undefined; assuming extern returning int e:\c\pp.c(99) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(100) : error C2275: 'ElemType' : illegal use of this type as an expression         e:\c\pp.c(11) : see declaration of 'ElemType' e:\c\pp.c(100) : error C2146: syntax error : missing ';' before identifier 'e' e:\c\pp.c(100) : error C2065: 'e' : undeclared identifier e:\c\pp.c(101) : error C2065: 'i' : undeclared identifier e:\c\pp.c(103) : warning C4013: 'GetElem_L' undefined; assuming extern returning int e:\c\pp.c(107) : warning C4013: 'ListInsert_L' undefined; assuming extern returning int e:\c\pp.c(115) : warning C4013: 'ListDelete_L' undefined; assuming extern returning int 执行 cl.exe 时出错.  pp.obj - 1 error(s), 0 warning(s)  这是我学数据结构的第一个代码   我自己也不知道是什么意思，完全不懂[/quote]   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList  这句后面少了分号

user: user-3
content: typedef这里最后少了个分号，导致一坨错误 跑起来以后，如果还有错误可以单步调试。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;  typedef struct LNode{ 	ElemType data; 	struct LNode *next; }LNode, *LinkList; void CreateList_L(LinkList &L, int n) { 	int i; 	LinkList p; 	L = (LinkList)malloc(sizeof(LNode)); 	L->next = NULL; 	for (i = n; i > 0; --i) 	{ 		p = (LinkList)malloc(sizeof(LNode)); 		scanf("%d", &p->data); 		getchar(); 		L->next = p->next; 		p->next = L; 	} } Status GetElem_L(LinkList L, int i, ElemType &e) { 	int j; 	LinkList p; 	p = L->next; j = 1; 	while (p&&j<i) 	{ 		p = p->next; 		++j; 	} 	if (!p || j>i) 		return ERROR; 	e = p->data; 	return OK; } Status ListInsert_L(LinkList L, int i, ElemType &e) { 	int j; 	LinkList p, s; 	p = L; j = 0; 	while (p&&j<i - 1) 	{ 		p = p->next; 		++j; 	} 	if (!p || j>i - 1) 		return ERROR; 	s = (LinkList)malloc(sizeof(LNode)); 	s->data = e; 	s->next = p->next; 	p->next = s; 	return OK; } Status ListDelete_L(LinkList &L, int i, ElemType &e) { 	int j; 	LinkList p, q; 	p = L; j = 0; 	while (p->next&&j<i - 1) 	{ 		p = p->next; 		++j; 	} 	if (!(p->next) || j>i - 1) 		return ERROR; 	q = p->next; 	p->next = q->next; 	e = q->data; 	free(q); 	return OK;  }  void main() { 	LinkList p, L; 	int n; 	scanf("%d", &n); 	getchar(); 	CreateList_L(L, n); 	p = L->next; 	while (p) 	{ 		printf("%d ", p->data); 		p = p->next; 	} 	printf("\n"); 	int i; 	ElemType e; 	scanf("%d", &i); 	getchar(); 	GetElem_L(L, i, e); 	printf("%d\n", e); 	scanf("%d %d", &i, &e); 	getchar(); 	ListInsert_L(L, i, e); 	for(p = L->next; p; p = p->next) 	{ 		printf("%d ", p->data); 	} 	printf("\n"); 	scanf("%d", &i); 	getchar(); 	ListDelete_L(L, i, e); 	for (p = L->next; p; p = p->next) 	{ 		printf("%d ", p->data); 	} 	printf("\n"); }

user: user-4
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-0
content: 引用 7 楼 user-5 的回复:把改过后的代码和报错信息一起粘 贴过来，才能帮你 #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList void CreateList_L(LinkList &L,int n) {     int i;     LinkList p;     L=(LinkList)malloc(sizeof(LNode));     L->next=NULL;     for(i=n;i>0;--i)     {         p=(LinkList)malloc(sizeof(LNode));         scanf("%d",&p->data); 		getchar();         L->next=p->next;         p->next=L;     } } Status GetElem_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p;     p=L->next;j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return ERROR;     e=p->data;     return OK; } Status ListInsert_L(LinkList L,int i,ElemType &e) {     int j;     LinkList p,s;     p=L;j=0;     while(p&&j<i-1)     {         p=p->next;         ++j;     }     if(!p||j>i-1)         return ERROR;     s=(LinkList)malloc(sizeof(LNode));     s->data=e;     s->next=p->next;     p->next=s;     return OK; } Status ListDelete_L(LinkList &L,int i,ElemType &e) {     int j;     LinkList p,q;     p=L;j=0;     while(p->next&&j<i-1)     {         p=p->next;         ++j;     }     if(!(p->next)||j>i-1)         return ERROR;     q=p->next;     p->next=q->next;     e=q->data;     free(q);     return OK;   }   void main() {     LinkList p,L;     int n;     scanf("%d",&n); 	getchar();     CreateList_L(L,n);     p=L->next;     while(p)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n");     int i;     ElemType e;     scanf("%d",&i); 	getchar();     GetElem_L(L,i,e);     printf("%d\n",e);     scanf("%d %d",&i,&e); 	getchar();     ListInsert_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n");     scanf("%d",&i); 	getchar();     ListDelete_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n"); } e:\c\pp.c(17) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(17) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(17) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(17) : error C2059: syntax error : '&' e:\c\pp.c(17) : error C2059: syntax error : ')' e:\c\pp.c(32) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(32) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(32) : error C2059: syntax error : '&' e:\c\pp.c(32) : error C2059: syntax error : ')' e:\c\pp.c(47) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(47) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(47) : error C2059: syntax error : '&' e:\c\pp.c(47) : error C2059: syntax error : ')' e:\c\pp.c(65) : error C2143: syntax error : missing ')' before '&' e:\c\pp.c(65) : error C2143: syntax error : missing '{' before '&' e:\c\pp.c(65) : error C2059: syntax error : '&' e:\c\pp.c(65) : error C2059: syntax error : ')' e:\c\pp.c(91) : warning C4013: 'CreateList_L' undefined; assuming extern returning int e:\c\pp.c(99) : error C2143: syntax error : missing ';' before 'type' e:\c\pp.c(100) : error C2275: 'ElemType' : illegal use of this type as an expression         e:\c\pp.c(11) : see declaration of 'ElemType' e:\c\pp.c(100) : error C2146: syntax error : missing ';' before identifier 'e' e:\c\pp.c(100) : error C2065: 'e' : undeclared identifier e:\c\pp.c(101) : error C2065: 'i' : undeclared identifier e:\c\pp.c(103) : warning C4013: 'GetElem_L' undefined; assuming extern returning int e:\c\pp.c(107) : warning C4013: 'ListInsert_L' undefined; assuming extern returning int e:\c\pp.c(115) : warning C4013: 'ListDelete_L' undefined; assuming extern returning int 执行 cl.exe 时出错.  pp.obj - 1 error(s), 0 warning(s)  这是我学数据结构的第一个代码   我自己也不知道是什么意思，完全不懂

user: user-5
content: 把改过后的代码和报错信息一起粘 贴过来，才能帮你

user: user-0
content: 引用 4 楼 user-5 的回复:还有，在所有的scanf函数后面都加上一句getchar();清空缓存  不行啊、、、

user: user-0
content: 引用 2 楼 paschen 的回复:scanf(&p->data);  scanf第一个参数是字符串，而不是接收数据的地址  主函数中 int i  后面少了个分号   改了，还是有一堆错误、

user: user-5
content: 还有，在所有的scanf函数后面都加上一句getchar();清空缓存

user: user-5
content: void CreateList_L(LinkList &L,int n) { 	int i;	 	LinkList p=NULL,pend=NULL;	 	L=(LinkList)malloc (sizeof (LNode));	 	L->next=NULL;	 	for （i=n;i＞0;--i）     {     	p=(LinkList)malloc(sizeof (LNode));		     	scanf("%d",&p->data);		     	getchar();     	if (L->next==NULL)          	L->next=p;	         else             pend->next=p;     	pend=p;     } }

user: user-5
content: 3楼的回复，你没看到吗？照着改啊

user: user-0
content: #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType;   typedef struct LNode{     ElemType data;     struct LNode *next; }LNode,*LinkList; void CreateList_L(LinkList L,int n) {     int i;     LinkList p;     L=(LinkList)malloc(sizeof(LNode));     L->next=NULL;     for(i=n;i>0;--i)     {         p=(LinkList)malloc(sizeof(LNode));         scanf("%d",&p->data);         L->next=p->next;         p->next=L;     } } Status GetElem_L(LinkList L,int i,ElemType e) {     int j;     LinkList p;     p=L->next;j=1;     while(p&&j<i)     {         p=p->next;         ++j;     }     if(!p||j>i)         return ERROR;     e=p->data;     return OK; } Status ListInsert_L(LinkList L,int i,ElemType e) {     int j;     LinkList p,s;     p=L;j=0;     while(p&&j<i-1)     {         p=p->next;         ++j;     }     if(!p||j>i-1)         return ERROR;     s=(LinkList)malloc(sizeof(LNode));     s->data=e;     s->next=p->next;     p->next=s;     return OK; } Status ListDelete_L(LinkList L,int i,ElemType e) {     int j;     LinkList p,q;     p=L;j=0;     while(p->next&&j<i-1)     {         p=p->next;         ++j;     }     if(!(p->next)||j>i-1)         return ERROR;     q=p->next;     p->next=q->next;     e=q->data;     free(q);     return OK;   }   void main() {     LinkList p,L;     int n; 	int i;     ElemType e;     scanf("%d",&n);     CreateList_L(L,n);     p=L->next;     while(p)     {         printf("%d ",p->data);         p=p->next;     }     printf("\n");         scanf("%d ",&i);     GetElem_L(L,i,e);     printf("%d\n",e);     scanf("%d %d",&i,&e);     ListInsert_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n");     scanf("%d",&i);     ListDelete_L(L,i,e);     for(p=L->next;p;p=p->next)     {         printf("%d ",p->data);     }     printf("\n"); }  编辑和组建没有问题，但是运行的时候，突然中断了，这又是什么情况啊，哪里出问题了嘛？

user: user-2
content: scanf(&p->data);  scanf第一个参数是字符串，而不是接收数据的地址  主函数中 int i  后面少了个分号