user-0 提问: 刚学链表，写了个程序，可能是指针地址不对，有大佬帮忙看看吗

回复:
user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633 谢谢老师，我先看看

user: user-0
content: 引用 2 楼 hou09tian 的回复:改了以下，VS2015编译通过了  // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <stdlib.h> struct sz { 	int num; 	char name; 	int money; 	struct sz *next; }; struct sz *create() { 	struct sz *p1, *p2, *head; 	struct sz p0; 	int num, money; 	char name; 	int n = 0; 	head = NULL; 	p1 = p2 = &p0; 	p1 = p2 = (struct sz*)malloc(sizeof(struct sz)); 	printf("\n\t\t 请输入编号,名称，金额："); 	scanf("%d,%s,%d", &p1->num, &p1->name, &p1->money); 	while (p1->num != 0) 	{ 		n++; 		if (n == 1)	head = p1; 		else p2->next = p1; 		p2 = p1; 		p1 = (struct sz*)malloc(sizeof(struct sz)); 		printf("\n\t\t 请输入编号,名称，金额："); 		scanf("%d,%s,%d", &p1->num, &p1->name, &p1->money); 	} 	p2->next = NULL; 	return head; }  void printlist(struct sz *head) { 	struct sz *p; 	p = head; 	p = (struct sz*)malloc(sizeof(struct sz)); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *编号*名称*    金额    * \t\n"); 	if (head != NULL) 	{ 		/*do 		{ 		printf("\n\t\t %d,%s,%d",p->num,p->name,p->money); 		p=p->next; 		}while(p!=NULL); 		*/ 		while (p->next != NULL) 		{ 			printf("\n\t\t %d %s %d", p->num, p->name, p->money); 			p = p->next; 		} 	} 	printf("\n\t\t ************************ \t"); } //按照日期删除  struct sz *deletenode(struct sz *head, int num) { 	struct sz *p1, *p2=NULL; 	if (head == NULL)	printf("\n\t\t The List is NULL.\n"); 	else 	{ 		p1 = head; 		while (p1->next != NULL && p1->num != num) 		{ 			p2 = p1; 			p1 = p1->next; 		} 		if (p1->num == num) 		{ 			if (p1 == head) 				head = p1->next; 			else 				p2->next = p1->next; 		} 		else 			printf("\n\t\t Can not find list num.\n"); 	} 	return head; }  void wlc() { 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      个人收支服务    * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      1.收入管理      * \t"); 	printf("\n\t\t *      2.支出管理      * \t"); 	printf("\n\t\t *      3.关闭系统      * \t"); 	printf("\n\t\t ************************ \t\n"); 	printf("\n\t\t 请输入你的选择："); }  int in() { 	struct sz *head = NULL; 	system("cls"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *       收入管理       * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      1.添加收入      * \t"); 	printf("\n\t\t *      2.删除收入      * \t"); 	printf("\n\t\t *      3.打印收入      * \t"); 	printf("\n\t\t ************************ \t\n"); 	printf("\n\t\t 请输入你的选择："); 	int a; 	scanf("%d", &a); 	switch (a) 	{ 	case 1: 	{ 		head = create(); 	}	break; 	case 2: 	{ 		printf("\n\t\t 请输入需删除的编号："); 		int num; 		scanf("%d", &num); 		deletenode(head, num); 		getchar(); 		printlist(head); 	}break; 	case 3: 	{ 		printlist(head); 		getchar(); 	}break; 	case 4: 	{ 	}break; 	} 	return 0; } void ex() { 	//---------------需要添加代码！！！ } void end() { 	system("cls"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      个人收支服务    * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *                      * \t"); 	printf("\n\t\t *     感谢您的使用！   * \t"); 	printf("\n\t\t *                      * \t"); 	printf("\n\t\t ************************ \t\n"); } void choice() { 	int a; 	scanf("%d", &a); 	while (a != 0) 		switch (a) 		{ 		case 1:do { 			in(); 		} while (in() == 4); break; 		case 2:ex(); break; 		case 3:end(); break; 		} }  int main() { 	wlc(); 	choice();  	return 0; }  我用的DEV，这样只是从崩溃变成了闪屏。还是没有打印。

user: user-1
content: 改了以下，VS2015编译通过了  // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <stdlib.h> struct sz { 	int num; 	char name; 	int money; 	struct sz *next; }; struct sz *create() { 	struct sz *p1, *p2, *head; 	struct sz p0; 	int num, money; 	char name; 	int n = 0; 	head = NULL; 	p1 = p2 = &p0; 	p1 = p2 = (struct sz*)malloc(sizeof(struct sz)); 	printf("\n\t\t 请输入编号,名称，金额："); 	scanf("%d,%s,%d", &p1->num, &p1->name, &p1->money); 	while (p1->num != 0) 	{ 		n++; 		if (n == 1)	head = p1; 		else p2->next = p1; 		p2 = p1; 		p1 = (struct sz*)malloc(sizeof(struct sz)); 		printf("\n\t\t 请输入编号,名称，金额："); 		scanf("%d,%s,%d", &p1->num, &p1->name, &p1->money); 	} 	p2->next = NULL; 	return head; }  void printlist(struct sz *head) { 	struct sz *p; 	p = head; 	p = (struct sz*)malloc(sizeof(struct sz)); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *编号*名称*    金额    * \t\n"); 	if (head != NULL) 	{ 		/*do 		{ 		printf("\n\t\t %d,%s,%d",p->num,p->name,p->money); 		p=p->next; 		}while(p!=NULL); 		*/ 		while (p->next != NULL) 		{ 			printf("\n\t\t %d %s %d", p->num, p->name, p->money); 			p = p->next; 		} 	} 	printf("\n\t\t ************************ \t"); } //按照日期删除  struct sz *deletenode(struct sz *head, int num) { 	struct sz *p1, *p2=NULL; 	if (head == NULL)	printf("\n\t\t The List is NULL.\n"); 	else 	{ 		p1 = head; 		while (p1->next != NULL && p1->num != num) 		{ 			p2 = p1; 			p1 = p1->next; 		} 		if (p1->num == num) 		{ 			if (p1 == head) 				head = p1->next; 			else 				p2->next = p1->next; 		} 		else 			printf("\n\t\t Can not find list num.\n"); 	} 	return head; }  void wlc() { 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      个人收支服务    * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      1.收入管理      * \t"); 	printf("\n\t\t *      2.支出管理      * \t"); 	printf("\n\t\t *      3.关闭系统      * \t"); 	printf("\n\t\t ************************ \t\n"); 	printf("\n\t\t 请输入你的选择："); }  int in() { 	struct sz *head = NULL; 	system("cls"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *       收入管理       * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      1.添加收入      * \t"); 	printf("\n\t\t *      2.删除收入      * \t"); 	printf("\n\t\t *      3.打印收入      * \t"); 	printf("\n\t\t ************************ \t\n"); 	printf("\n\t\t 请输入你的选择："); 	int a; 	scanf("%d", &a); 	switch (a) 	{ 	case 1: 	{ 		head = create(); 	}	break; 	case 2: 	{ 		printf("\n\t\t 请输入需删除的编号："); 		int num; 		scanf("%d", &num); 		deletenode(head, num); 		getchar(); 		printlist(head); 	}break; 	case 3: 	{ 		printlist(head); 		getchar(); 	}break; 	case 4: 	{ 	}break; 	} 	return 0; } void ex() { 	//---------------需要添加代码！！！ } void end() { 	system("cls"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *      个人收支服务    * \t"); 	printf("\n\t\t ************************ \t"); 	printf("\n\t\t *                      * \t"); 	printf("\n\t\t *     感谢您的使用！   * \t"); 	printf("\n\t\t *                      * \t"); 	printf("\n\t\t ************************ \t\n"); } void choice() { 	int a; 	scanf("%d", &a); 	while (a != 0) 		switch (a) 		{ 		case 1:do { 			in(); 		} while (in() == 4); break; 		case 2:ex(); break; 		case 3:end(); break; 		} }  int main() { 	wlc(); 	choice();  	return 0; }

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633