偶然遇到了scanf输入字符时,前面与要加上空格

news/2024/9/23 8:56:28/

任务描述

本关任务:给定一个含有n个学生数据元素的数组a,用头插法来快速创建整个单链表。

相关知识

创建单链表有两种方法:

  1. 先初始化一个单链表,然后向其中一个一个地插入元素,通过调用基本运算算法来创建单链表。
  2. 还可以快速创建整个单链表,称为整体建表。整体建表常用方法有两种:头插法和尾插法。

头插法是将新增结点插入在头结点之后,单链表头插法创建过程示意图如下:

头插法创建单链表的

头插法创建单链表的算法思想:

  1. 从一个空单链表(含有一个L指向的头结点)开始,读取数组a(含有n个元素)中的一个元素,生成一个新结点p,将读取的数据元素存放到新结点的数据域中。
  2. 将新结点p插入到当前链表的表头后。
  3. 再读取数组a的下一个元素,采用相同的操作建立新结点p并插入到单链表L中,直到数组a中所有元素读完为止。

注意:头插法创建的单链表L中数据结点的次序与数组a的元素次序正好相反。

定义学生数据类型及输入、输出函数如下:

typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[20];
char sex;
DATE birthday;
float score;
}STUDENT;
typedef STUDENT ElemType;
void input(ElemType &s);
void output(ElemType s);

单链表结点类型定义如下:

typedef struct LNode // 结点类型定义
{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList; // LinkList为结构指针类型

测试说明

平台会对你编写的代码进行测试。

测试输入:

5
10010
Liyi
M
2000 5 23
45
10020
Lier
M
2001 2 3
62.5
10030
Lisan
F
2000 10 14
92.5
10040
Lisi
F
2002 7 23
87
10050
Liwu
M
1999 8 6
78

输入说明: 第一行输入为学生的个数N; 第二行开始输入N个学生的具体信息。

预期输出:

学号:10050      姓名:Liwu       性别:M  出生日期:1999-8-6       成绩:78.0
学号:10040      姓名:Lisi       性别:F  出生日期:2002-7-23      成绩:87.0
学号:10030      姓名:Lisan      性别:F  出生日期:2000-10-14     成绩:92.5
学号:10020      姓名:Lier       性别:M  出生日期:2001-2-3       成绩:62.5
学号:10010      姓名:Liyi       性别:M  出生日期:2000-5-23      成绩:45.0

输出说明: 输出为学生数据创建的单链表;每行输出一个学生的信息,输出数据的次序与输入次序正好相反。

这是我的答案1:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct date{int year;int month;int day;
}DATE;
typedef struct student{int num;char name[20];char sex;DATE birthday;float score;
}STUDENT;typedef STUDENT ElemType;
void input(ElemType &s);
void output(ElemType s);typedef struct LNnode{ElemType data;struct LNnode *next;
}LNnode,*LinkList;
void CreateHeadList(LinkList &L,ElemType a[],int n);//根据数组使用头插法创建单链表
void InitList(LinkList &L); 
void ListTraverse(LinkList L,void(*vi)(ElemType));int main(){int n;LinkList head;ElemType a[100];scanf("%d",&n);for(int i = 0;i<n;i++){input(a[i]);}CreateHeadList(head,a,n);ListTraverse(head,output);return 0;
} void input(ElemType &s){scanf("%d",&(s.num));scanf("%s",s.name);scanf(" %c",&(s.sex));//注意这里加了一个空格scanf("%d%d%d",&(s.birthday.year),&(s.birthday.month),&(s.birthday.day));scanf("%f",&(s.score));
}void output(ElemType s){printf("学号:%d\t姓名:%s\t性别:%c\t",s.num,s.name,s.sex);printf("出生日期:%d-%d-%d\t成绩:%.1f\n",s.birthday.year,s.birthday.month,s.birthday.day,s.score);
}void InitList(LinkList &L){L = new LNnode;L->next = NULL;
}void ListTraverse(LinkList L,void(*vi)(ElemType)){LinkList p  = L->next;while(p){vi(p->data);p = p->next;}printf("\n");
}void CreateHeadList(LinkList &L,ElemType a[],int n){InitList(L);for(int i = 0;i<n;i++){ElemType e = a[i];LNnode *A = new LNnode;A->data = e;A->next = NULL;A->next = L->next;L->next = A;}
}

scanf输入字符,前面加了空格没有出现任何问题。现在演示不接空格的情况

scanf("%c",&(s.sex));

看到没结果变得杂乱无章。


http://www.ppmy.cn/news/1509867.html

相关文章

亚马逊测评的本质是什么?

在电商领域&#xff0c;无论是深耕国内市场还是拓展国际版图&#xff0c;精准选择并成功推广引流款产品至关重要&#xff0c;这一过程的核心环节之一便是对上架产品进行系统化测评&#xff0c;以确保其在市场中获得良好的曝光与转化&#xff0c;以下是对亚马逊平台测评流程的深…

https中的TLS协议

TLS简介 TLS是一种安全协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性。 它是SSL协议的继任者&#xff0c;由IETF&#xff08;互联网工程任务组&#xff09;在RFC 5246中标准化。 TLS协议位于TCP/IP协议栈的传输层之上&#xff0c;它使用加密技术来确保…

【密码学】密钥管理:③密钥的保护、存储、备份、撤销、过期、销毁

之前的文章把密钥管理技术的关键内容讲完了&#xff0c;重点是理解密钥管理系统的概念、密钥生成和密钥分配。剩下的有关密钥的保护、存储、备份、撤销、过期和销毁的内容&#xff0c;就用这篇文章简单的做个介绍即可。如果没有看前面重点内容的可以点击下面链接跳转&#xff1…

低代码开发平台通过钉钉API实现流程管理数据对接

实例背景&#xff1a; CRM项目虽然实现了报价转订单的功能&#xff0c;但是客户还是遇到使用不方便的问题&#xff0c;客户的业务流程中&#xff0c;审核报价的时候是需要提供销售人员与客户的聊天记录截图&#xff0c;这都是在手机上的&#xff0c;电脑操作不方便&#xff0c…

Node.js、npm和ng之间的关系

一、Node.js 定义&#xff1a;Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;它允许开发者在服务器端运行JavaScript代码。Node.js基于Chrome V8引擎&#xff0c;提供高性能和非阻塞I/O&#xff08;输入输出&#xff09;操作。功能&#xff1a;Node.js主要用于…

idea付费插件,哪个比较好用?

以下idea付费插件你们都用过哪些呢&#xff1f; 获取链接&#xff1a;https://web.52shizhan.cn

Docker Swarm部署SpringCloud Alibaba微服务踩坑记录

为了方便部署和维护微服务项目&#xff0c;还是得上集群部署方案&#xff0c;决定采用Docker的swarm&#xff0c;为什么不是k8s&#xff0c;因为部署骑来又是个新的工具&#xff0c;之前就一直用的docker&#xff0c;自带了类k8s的工具&#xff0c;索性就直接使用swarm了&#…

用视频文件模拟摄像头进行抖音、视频号直播的无人直播机(虚拟摄像头)推流器使用说明详细介绍

无人直播机是嵌入式软硬件一体化设计&#xff0c;支持远程修改设备参数&#xff0c;远程回放设备录像&#xff0c;还支持3.5mm音频实时互动&#xff0c;以及多个视频随机轮播或者顺序轮播。无人直播机不仅稳定还节能&#xff0c;支持7*24小时运行&#xff0c;不死机不卡顿。 一…