user-0 提问: 【求助】写了一个关于链表的小程序，但是除了点错误

回复:
user: user-0
content: 引用 2 楼 cfjtaishan 的回复:#include<stdio.h> #include<malloc.h> #include <stdlib.h>  struct node { 	int number; 	int exp; 	struct node *next; };  int main(){   	struct node *pa, *p1, *head1,*pb, *p2, *head2;  	head1 =  (struct node *)malloc(sizeof(struct node)); 	if (!head1) 		exit(0); 	pa = p1 = head1;  	printf("请输入第一个多项式的系数和指数："); 	scanf("%d %d", &pa->number, &pa->exp);  	while (pa->number != 0 && pa->exp != 0) { 		p1 = pa; 		pa = (struct node *)malloc(sizeof(struct node)); 		printf("请输入第一个多项式的系数和指数(两数都为零结束)："); 		scanf("%d %d", &pa->number, &pa->exp); 		p1->next = pa; 	} 	if (pa != head1) { 		p1->next = NULL; 		free(pa); 	}  	head2 =  (struct node *)malloc(sizeof(struct node)); 	if (!head2) 		exit(0); 	pb = p2 = head2; 	printf("请输入第二个多项式的系数和指数："); 	scanf("%d %d", &pb->number, &pb->exp);  	while (pb->number != 0 && pb->exp != 0) { 		p2 = pb; 		pb = (struct node *)malloc(sizeof(struct node)); 		printf("请输入第二个多项式的系数和指数(两数都为零结束)："); 		scanf("%d %d", &pb->number, &pb->exp); 		p2->next = pb; 	} 	if (pb != head2) { 		p2->next = NULL; 		free(pb); 	}  	pa = head1; 	pb = head2;  	while (pa){ 		printf("第一个多项式的：%d %d\n", pa->number, pa->exp); 		pa = pa->next;  	}  	while (pb){ 		printf("第二个多项式的：%d %d\n", pb->number, pb->exp); 		pb = pb->next;  	}  	return 0;  }   参考一下吧； 除了scanf和printf搞混之外。链表逻辑不正确， 比如，是系数和指数都为0时，退出循环，但是给出的条件是只要有一个为0，即退出循环。 链表输出，没有对pa，pb做修改，即只能输出（死循环）第一个节点的系数和指数。  scanf那里确实错了，最后循环输出的逻辑也有一些问题，已经改正了，谢谢

user: user-0
content: 谢谢前面的两个老哥，scanf那里确实错了，最后循环输出的逻辑也有一些问题，已经改正了

user: user-1
content: #include<stdio.h> #include<malloc.h> #include <stdlib.h>  struct node { 	int number; 	int exp; 	struct node *next; };  int main(){   	struct node *pa, *p1, *head1,*pb, *p2, *head2;  	head1 =  (struct node *)malloc(sizeof(struct node)); 	if (!head1) 		exit(0); 	pa = p1 = head1;  	printf("请输入第一个多项式的系数和指数："); 	scanf("%d %d", &pa->number, &pa->exp);  	while (pa->number != 0 && pa->exp != 0) { 		p1 = pa; 		pa = (struct node *)malloc(sizeof(struct node)); 		printf("请输入第一个多项式的系数和指数(两数都为零结束)："); 		scanf("%d %d", &pa->number, &pa->exp); 		p1->next = pa; 	} 	if (pa != head1) { 		p1->next = NULL; 		free(pa); 	}  	head2 =  (struct node *)malloc(sizeof(struct node)); 	if (!head2) 		exit(0); 	pb = p2 = head2; 	printf("请输入第二个多项式的系数和指数："); 	scanf("%d %d", &pb->number, &pb->exp);  	while (pb->number != 0 && pb->exp != 0) { 		p2 = pb; 		pb = (struct node *)malloc(sizeof(struct node)); 		printf("请输入第二个多项式的系数和指数(两数都为零结束)："); 		scanf("%d %d", &pb->number, &pb->exp); 		p2->next = pb; 	} 	if (pb != head2) { 		p2->next = NULL; 		free(pb); 	}  	pa = head1; 	pb = head2;  	while (pa){ 		printf("第一个多项式的：%d %d\n", pa->number, pa->exp); 		pa = pa->next;  	}  	while (pb){ 		printf("第二个多项式的：%d %d\n", pb->number, pb->exp); 		pb = pb->next;  	}  	return 0;  }   参考一下吧； 除了scanf和printf搞混之外。链表逻辑不正确， 比如，是系数和指数都为0时，退出循环，但是给出的条件是只要有一个为0，即退出循环。 链表输出，没有对pa，pb做修改，即只能输出（死循环）第一个节点的系数和指数。

user: user-2
content: 你scanf的用法都错了。按你的用法要输入“请输入第一个多项式的系数和指数：5 2”才行，不过这样要打很多字，此外多加printf说明。 我的例子自己参考下  #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<malloc.h>  struct node { 	int number; 	int exp; 	struct node *next; };  void main() { 	 	struct node *pa; 	pa =(struct node *)malloc(sizeof(struct node)); 	memset(pa, 0, sizeof(struct node));  	 	scanf("%d %d", &pa->number, &pa->exp); 	printf("第一个多项式的系数和指数：%d %d", pa->number, pa->exp);   	  	system("pause");    }