C语言链表create函数调用后终端重复要求输入问题求助
问题修复方案
核心问题原因
你遇到的需要两次输入的问题,根源是create函数内scanf的格式字符串存在多余空格:
scanf("%d ",&num);
%d后的空格属于scanf格式控制中的空白符,这类字符会指示scanf跳过输入流中任意数量的连续空白(包括回车、空格、制表符),直到匹配到第一个非空白字符才会结束本次读取。因此你输入节点数值按下回车后,scanf仍在等待非空白输入触发终止,才会出现要求二次输入的现象。
修复方式
直接删除%d后的空格即可:
scanf("%d",&num);
额外潜在问题修复
你当前代码还存在内存分配错误的隐患:
newnode = (struct node *)malloc(sizeof(struct node *));
此处sizeof取的是结构体指针的大小(通常为4/8字节,由系统位数决定),远小于存储struct node整个结构体需要的空间,后续给结构体成员赋值会触发内存越界,引发未定义行为。正确写法应为:
newnode = (struct node *)malloc(sizeof(struct node));
内容的提问来源于stack exchange,提问作者Rishi Patel
相关产品推荐
相关产品推荐

