针对c语言的scanf读取字符和字符串解析

scanf函数中,格式字符串里的空格字符有特定的作用。

当你在格式字符串里放置一个空格时,scanf会尝试匹配并消耗输入中的一个或多个空白字符(包括空格、制表符或换行符)。换句话说,它会跳过任何空白字符,直到找到下一个非空白字符。

例如,考虑以下代码:

c复制代码

int number; 
char character; 
scanf("%d %c", &number, &character);

 

如果用户输入1234 ascanf会首先读取1234并将其存储在number中。然后它会跳过空格,并读取字符'a',将其存储在character中。

格式字符串中的空格确保了在读取整数和字符之间有任意的空白字符被跳过。这为用户输入提供了一定的灵活性,因为他们可以在整数和字符之间自由地添加空格、制表符或换行符。

那么什么是空白字符呢

空白字符是指在屏幕上不会显示出来的字符,例如空格、制表符(tab)、回车、换行等。这些字符用于控制格式和布局,在文本处理中扮演着重要的角色。在C语言中,编译器在分析代码时会忽略空白字符,除非使用它们作为分隔符或作为字符常数或字符串文本元素。在输入时,例如使用scanf函数时,格式字符串中的空格会匹配并消耗输入中的一个或多个空白字符,为用户输入提供了一定的灵活性。

好啦,知道这些前置知识可以开始我们的正式讲解啦

首先,scanf只有%c可以单独吸收空格,回车等字符(记住是从输入缓冲区将这些字符拿出来),而其他格式字符例如%d,%s一遇到空格回车就会停止,而将空格回车留到输入缓冲区中。

int main(){//duqu();char a;char b;char c;scanf("%c%c%c",&a,&b,&c);printf("%c%c%c",a,b,c);return 0;
} 

可以看到我们使用%c输入的是a空格b三个字符而%c全吸收了

int main(){//duqu();char a[20];char b;char c;scanf("%s",&a);printf("%c%c%c",a[0],a[1],a[2]);return 0;
} 

当我们使用%s时遇到空格停止输入所以只有a

综上所述,如果以后读取文件,或者写入数字和字符混合的字符串,可以考虑两种方法

第一使用

void duqu(){FILE *fp;fp=fopen("E:\\数据结构实验\\aaa.txt","r");int a;char b;fscanf(fp,"%d ",&a);printf("%d\n",a);int c;for(c=0;c<3;c++){fscanf(fp,"%c %d ",&b,&a);printf("%c %d\n",b,a);}fclose(fp);
}

如图中读取文件一般使用%c和%d外加空格空过去我们不想读取的空字符和换行符

第二

直接使用%c读取换行或者制表表符或者回车

额外附加

如果想直接读取一个带空格的字符串也可以使用gets()这个函数,它可以把回车直接踢出缓存区并接受空格

验证:

int main(){//duqu();
char a[20];
char b;
//gets(a);
scanf("%s",&a);
b=getchar();
printf("%c%c%c\n",a[0],a[1],a[2]);
printf("%cA",b);return 0;
} 

可以看到b字符接受的是回车,因为scanf遇到回车停止而回车字符仍然在输入缓冲区,所以getchar()就接受到了这个回车字符

int main(){//duqu();
char a[20];
char b;
gets(a);
//scanf("%s",&a);
b=getchar();
printf("%c%c%c\n",a[0],a[1],a[2]);
printf("%cA",b);return 0;
} 

我们看使用gets()输入的字符串,可以发现比其上一个代码,这次我输入了整整两行,这是因为gets接收到了字符后,他直接把回车键提出输入缓冲区,导致缓冲区啥也没有,所以需要我们另外在输入一个子符,而可以看到b是收到字符w,而字符串的空格也接收到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery_09 事件的绑定与使用(on)

jQuery使用on绑定事件 jQuery可以给dom对象添加事件 在程序执行期间动态的处理事件 1. $("选择器").事件名称(事件处理函数) $("选择器") &#xff1a; 选择0或者多个dom对象 给他们添加事件 事件名称&#xff1a;就是js中事件名称去掉on的部分 比如单击…

js逆向-JS加密破解

一、常见五种js加密手段 &#xff08;一&#xff09;加密位置&#xff1a; 1.Request Payload 加密 2.Request Headers 加密 3.Request URL params 参数加密 4.Response Data 数据加密 5.JS代码混淆加密 &#xff08;二&#xff09;加密算法 base64 编码 哈希算法&…

抖音视频怎么提取动图?手机视频转gif方法

抖音是人们休闲娱乐消遣时光必备的短视频软件&#xff0c;当我们想要把好玩有趣的抖音短视频转换成gif动画时&#xff0c;要怎么操作呢&#xff1f;通过使用gif动图制作&#xff08;https://www.gif.cn/&#xff09;网站-GIF中文网&#xff0c;手机自带浏览器&#xff0c;上传视…

Leetcode—45.跳跃游戏II【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—45.跳跃游戏II 贪心法思想 实现代码 #define MAX(a, b) (a > b ? (a) : (b))int jump(int* nums, int numsSize) {int start 0;int end 1;int ans 0;int maxStride 0;while(end < numsSize) {maxStride 0;fo…

向量机SVM原理理解和实战

目录 概念场景导入 点到超平面的距离公式 最大间隔的优化模型 硬间隔、软间隔和非线性 SVM 用 SVM 如何解决多分类问题 1. 一对多法 2. 一对一法 SVM主要原理和特点 原理 优点 缺点 支持向量机模型分类 SVM实战如何进行乳腺癌检测 数据集 字段含义 代码实现 参…

所有网站文本复制方法(知网、百度文库等)

实现文字复制自由 在肝学校结课论文是发现要用的论文文字都无法复制&#xff0c;所以想到了以前学到的一个方法&#xff0c;开始忘了&#xff0c;突然想起来&#xff0c;现在记录一下。 拿我现在肝的课程结课论文为例&#xff1a; 方法一 在谷歌浏览器的网址前面有一个列表一…

ES8生产实践——日志清洗过滤(vector方案)

前言 什么是vector 以下描述摘自官方文档&#xff1a;https://vector.dev/docs/about/what-is-vector/ Vector 是一个高性能的可观测性数据管道&#xff0c;可帮助企业控制其可观测性数据。收集、转换和路由所有日志、度量指标和跟踪数据&#xff0c;并将其提供给今天需要的任…

CSS新手入门笔记整理:CSS基本选择器

id属性 id属性具有唯一性&#xff0c;也就是说&#xff0c;在一个页面中相同的id只能出现一次。在不同的页面中&#xff0c;可以出现两个id相同的元素。 语法 <div id"text"> ...... </div> class属性 class&#xff0c;顾名思义&#xff0c;就是“类…

LeetCode.283移动零(双指针)

LeetCode.283移动零 1.问题描述2.解题思路3.代码 1.问题描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1…

(三) Windows 下 Sublime Text 3 配置Python环境和Anaconda代码提示

一&#xff1a;新建一个 Python3.7 编译环境。 1 Tools--Build System--New Build System... 修改前&#xff1a; 修改后&#xff1a; 内容&#xff1a; {"cmd":["C:\\Python\\Python37-32\\python.exe","-u","$file"],"file_r…

开通橱窗还能开抖店吗?怎么开通?一篇详解!

我是电商珠珠 开通商品橱窗之后还能开抖店吗&#xff1f;商品橱窗和抖音小店可以同时开吗&#xff1f; 一部分人最初的时候&#xff0c;都觉得直播带货很火&#xff0c;所以就自己去买粉丝或是发视频积攒粉丝&#xff0c;等粉丝够了发现&#xff0c;好像和当初想的不太一样&a…

关于反射、枚举以及Lambda表达式你了解多少呢?快来看看吧~

目录 1、反射 1.1、定义 1.2、用途 1.3、反射基本信息 1.4、反射相关的类【重点】 1.5、Class类&#xff08;反射机制的起源&#xff09; 1.6、Class类中相关的方法 1.7、获得Class对象的三种方式 1.8、反射的使用 1.9、反射的优点、缺点 2、枚举 2.1、背景及定义 …

ZGC 垃圾回收过程

ZGC&#xff08;Z Garbage Collector&#xff09;是Java平台上的一种垃圾收集器&#xff0c;它是由Oracle开发的&#xff0c;旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器&#xff0c;它主要针对具有大内存需求和低停顿时间要求的应用程序 ZGC的核心概念及…

基于STC12C5A60S2系列1T 8051单片按页写IIC总线器件24C02并显示在液晶显示器LCD1602上应用

基于STC12C5A60S2系列1T 8051单片机按页写IIC总线器件24C02并显示在液晶显示器LCD1602上应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍…

【brpc学习实践十】streaming log实战

实战实例 通常我们在服务还没正式起来时&#xff0c;会用brpc流式log打印&#xff0c;支持对日志输出到ostream对象中&#xff08;默认std)。同时会在服务初始化时配置LogSink&#xff0c;实现自己的log&#xff0c;这样后续都可以将输出重定向至自己的log. int init(int arg…

Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式

By: Ailson Jack Date: 2023.11.26 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/165.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

RocketMQ 安装部署及应用场景记录

文章目录 前言一、RocketMQ简介1.1 整体架构 二、RocketMQ安装部署2.1 RocketMQ 下载2.2 修改 JVM 参数2.3 启动 NameServer 和 Broker2.4 验证发送和接受消息2.5 停止 NameServer 和 Broker2.6 配置全局环境 三、RocketMQ应用场景3.1 异步处理3.2 应用解耦3.3 流量削峰 前言 …

7.前端--CSS-字体属性【2023.11.26】

CSS字体属性 CSS Fonts (字体)属性用于定义字体样式、粗细、大小、和字形。 1.文字样式 CSS 使用 font-style 属性设置文本的风格。 语法&#xff1a; p { font-style: normal; }属性&#xff1a; 2字体粗细 CSS 使用 font-weight 属性设置文本字体的粗细。 语法&#xff1a…

已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中

已知两个链表L1和L2分别表示两个集合&#xff0c;其中元素递增排列。请设计一个算法&#xff0c;用于求出L1与L2的交集&#xff0c;并存放在L1链表中。 代码思路&#xff1a; 我们创建一个辅助链表L3&#xff0c;用于存储L1和L2链表的交集&#xff0c;用s遍历L3各个元素 用p和…

Java | The last packet sent successfully to the server was xxx milliseconds ago

最近在部署代码后&#xff0c;后端总是会遇到这个问题&#xff0c;设备通道在访问数据库时经常会报错&#xff0c;在搜集大量资料后我以为是配置问题&#xff0c;首先要保证&#xff1a; &#xff08;1&#xff09;首先确定jdbc.url地址是正确的 &#xff08;2&#xf…