&Meku 、 2021-06-28 18:17 采纳率: 100%
浏览 6
已结题

在打印链表的时候,输入的数据和输出的数据不同,问题在哪?

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

struct student						//学生信息结构体
{
	int num;
	char name[3];
	int grade;
	int nianji;
};

struct Node {
	struct student data;						//数据域
	struct Node* next;				//指针域
};
struct Node* createList()						//创建链表
{
	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));		
	if (NULL == headNode)
	{
		return NULL;
	}
	headNode->next = NULL;
	return headNode;
};
struct Node* createNode(struct student data)									
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	if (NULL == newNode)
	{
		return NULL;
	}
	newNode->next = NULL;
	return newNode;
};

void printList(struct Node* headNode)					//输出学生信息
{
	struct Node* pMove = headNode->next;
	printf("\nnum\tname\tgrade\tnianji\n");
	while (pMove)
	{
		printf("%d\t%s\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.grade, pMove->data.nianji);
		pMove = pMove->next;
	}
	printf("\n");
}
void insertNodeByhead(struct Node* headNode,struct student data)			//输入学生信息结点
{
	struct Node* newNode = createNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}

void seekstudentname(struct Node* headNode, char name[3])				//通过输入学生姓名来寻找学生信息
{
	struct Node* pMove = headNode->next;
	printf("\nnum\tname\tgrade\tnianji\n");
	while (1)
	{
		if (pMove->data.name == name)
		{
			printf("%d\t%s\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.grade, pMove->data.nianji);
		}
		pMove = pMove->next;
	}
	printf("\n");
}

int main()
{
	struct Node* list = createList();
	struct student info;
	int m = 0;  //输入学生的个数
	printf("现有两种功能\n1.输入信息\n2.查找相关学生姓名的其他信息\n3.按任意键退出\n请选择你要进行的功能");
	int a = 0;
	scanf_s("%d", &a);
	while (1)
	{
		if (a == 1)
		{
			printf("请输入你想输入的学生的个数:\n");
			scanf_s("%d", &m);
			for (int n = 0;n < m; n++)
			{
				printf(" 学号:");
				scanf_s("%d", &info.num);
				printf(" 姓名:");
				scanf_s("%s", info.name,4);
				printf(" 班级:");
				scanf_s("%d", &info.grade);
				printf(" 年级:");
				scanf_s("%d", &info.nianji);
				insertNodeByhead(list, info);
			}
			printf("输入完毕\n");
			printList(list);
			system("pause");
		}
		if (a == 2)
		{
			printf("请输入你想查找的学生姓名:\n");
			char name1[20];
			scanf_s("%s", name1, 4);
			seekstudentname(list, name1);
		}
		else
			break;
	}
	return 0;
}

在进行功能1的时候,输入1 2 3 4 但是打印出来的链表却

不是1 2 3 4 

  • 写回答

1条回答 默认 最新

  • Alexxinlu 2021-06-28 19:48
    关注

    你的createNode函数根本就没有对Node中的属性进行赋值,传入到createNode中的参数data根本就没有使用。

    一段没赋值的内存空间,你直接输出,肯定就是一些奇怪的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日

悬赏问题

  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答
  • ¥15 STM32——硬件IIC从机通信代码实现
  • ¥15 微生物组数据分析--微生物代谢物
  • ¥30 求一跃动小子保卫主公Java算法实现
  • ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)