user-0 提问: 求C的大牛解答一下菜鸡问题！！

回复:
user: user-1
content: 引用 7 楼 qq_15173325 的回复:[quote=引用 6 楼 wh357589873 的回复:] 首先，为啥是同一个数，因为你用的是union,它虽然看起来很大，但是实际的大小和里面最大的元素的大小相等。实际只存一个数。为啥输入字母不行？你看看你那里scanf明明是%d,你应该输入数字的，不然这句是执行失败的。  这些我仔细处理好了 但是又有新问题    [/quote]啥啊？

user: user-2
content: 错误原因分析： 1、union使用有误 union 中所有的数据成员共用一个空间，同一时间只能储存其中一个数据成员，所有的数据成员具有相同的起始地址。 修改如下： struct obj { 	char Nounion[20]; 	union iunion xinxi_shenfen; 	union iunion xinxi_name; 	union iunion xinxi_num; 	union iunion xinxi_sex; 	struct obj *pNext; }; 2、输入有误 编号为数字，不能输入非数字。  完整代码如下：  #include<stdio.h> #include<stdlib.h>  union iunion { 	char info[10]; 	int num; }; struct obj { 	char Nounion[20]; 	union iunion xinxi_shenfen; 	union iunion xinxi_name; 	union iunion xinxi_num; 	union iunion xinxi_sex; 	struct obj *pNext; };  int iCount;  struct obj *Create() { 	struct obj *pHead = NULL; 	struct obj *pEnd, *pNew; 	iCount = 0; 	pEnd = pNew = (struct obj*)malloc(sizeof(struct obj)); 	printf("请输入：1.身份 2.名字 3.编号 4.性别 5.班级或职位\n"); 	scanf("%s", &( (*pNew).xinxi_shenfen.info) ); 	scanf("%s", &( (*pNew).xinxi_name.info) ); 	scanf("%d", &((*pNew).xinxi_num.num)); 	scanf("%s", &((*pNew).xinxi_sex.info));  	scanf("%s", &(*pNew).Nounion); 	printf("身份：%s\n", (*pNew).xinxi_shenfen.info); 	printf("名字：%s\n", (*pNew).xinxi_name.info); 	printf("编号：%d\n", (*pNew).xinxi_num.num); 	printf("性别：%s\n", (*pNew).xinxi_sex.info); 	printf("班级或职位：%s\n", (*pNew).Nounion); 	while (pNew->xinxi_num.num != 0) 	{ 		iCount++; 		if (iCount == 1) 		{ 			pNew->pNext = pHead; 			pEnd = pNew; 			pHead = pNew; 		} 		else 		{ 			pNew->pNext = NULL; 			pEnd->pNext = pNew; 			pEnd = pNew; 		} 		pEnd = pNew = (struct obj*)malloc(sizeof(struct obj)); 		printf("请输入：1.身份 2.名字 3.编号 4.性别 5.班级或职位\n"); 		scanf("%s", &((*pNew).xinxi_shenfen.info)); 		scanf("%s", &((*pNew).xinxi_name.info)); 		scanf("%d", &((*pNew).xinxi_num.num)); 		scanf("%s", &((*pNew).xinxi_sex.info));  		scanf("%s", &(*pNew).Nounion); 		printf("身份：%s\n", (*pNew).xinxi_shenfen.info); 		printf("名字：%s\n", (*pNew).xinxi_name.info); 		printf("编号：%d\n", (*pNew).xinxi_num.num); 		printf("性别：%s\n", (*pNew).xinxi_sex.info); 		printf("班级或职位：%s\n", (*pNew).Nounion); 	} 	free(pNew); 	return pHead; }  void Print(struct obj *pHead) { 	struct obj *pTemp; 	int iIndex = 1; 	pTemp = pHead; 	while (pTemp != NULL) 	{ 		printf("身份：%s\n", pTemp->xinxi_shenfen.info); 		printf("名字：%s\n", pTemp->xinxi_name.info); 		printf("编号：%d\n", pTemp->xinxi_num.info); 		printf("性别：%s\n", pTemp->xinxi_sex.info); 		printf("班级或职位：%s\n", pTemp->Nounion); 	} }  void main() {	struct obj *pHead; 	pHead = Create(); 	Print(pHead); }

user: user-0
content: 引用 5 楼 yanxinrui0027 的回复:把union改成struct结构  这练习规定要用结构体和共用体

user: user-0
content: 引用 6 楼 wh357589873 的回复:首先，为啥是同一个数，因为你用的是union,它虽然看起来很大，但是实际的大小和里面最大的元素的大小相等。实际只存一个数。为啥输入字母不行？你看看你那里scanf明明是%d,你应该输入数字的，不然这句是执行失败的。  这些我仔细处理好了 但是又有新问题

user: user-1
content: 首先，为啥是同一个数，因为你用的是union,它虽然看起来很大，但是实际的大小和里面最大的元素的大小相等。实际只存一个数。为啥输入字母不行？你看看你那里scanf明明是%d,你应该输入数字的，不然这句是执行失败的。

user: user-3
content: 把union改成struct结构

user: user-0
content: 解决了一些问题  那是Print函数进入了死循环，处理ing

user: user-4
content: 建议单步跟踪程序运行，观察每一步是否与你期望的一致

user: user-5
content: 自己调试，调试方法：把相关变量输出，看从哪开始其值与自己预想的不一样，或从哪开始执行不下去了，这个地方前后仔细检查

user: user-0
content: 惨案