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

news2025/2/22 8:25:00

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.coloradmin.cn/o/1254111.html

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

相关文章

针对哈希冲突的解决方法

了解哈希表和哈希冲突是什么 哈希表&#xff1a;是一种实现关联数组抽象数据类型的数据结构&#xff0c;这种结构可以将关键码映射到给定值。简单来说哈希表&#xff08;key-value&#xff09;之间存在一个映射关系&#xff0c;是键值对的关系&#xff0c;一个键对应一个值。 …

蓝桥杯第四场双周赛(1~6)

1、水题 2、模拟题&#xff0c;写个函数即可 #define pb push_back #define x first #define y second #define int long long #define endl \n const LL maxn 4e057; const LL N 5e0510; const LL mod 1e097; const int inf 0x3f3f; const LL llinf 5e18;typedef pair…

java_基础_关键字

1.关键字的字母全部都是小写. 2.常用的代码编辑器(Notepad),针对关键字有特殊的颜色标记,非常的直观.

CleanMyMac X好不好用?有哪些优势

CleanMyMac X2024正是这一愿景和使命的体现。 作为一个团队&#xff0c;我们致力于采用令人过目不忘的设计来打造我们引以为豪的产品。 这是 UX/UI 设计已经成为我们核心价值的原因之一。 这也是我们不断完善它&#xff0c;从而为我们的用户创造最神奇体验的动力。 CleanMyMac …

基于springboot实现智慧党建系统项目【项目源码】

基于springboot实现智慧党建系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff0c;所以…

Drools Rule Language 学习笔记

Drools Rule Language 1 Packages in DRL 可以有多个packages但推荐只用一个packageexample&#xff1a; package org.mortgages; 2 Import statements in DRL 2.1 You specify the package and data object in the format packageName.objectName, with multiple imports …

野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用&#xff1a; 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈&#xff0c;从而最终调用 main 函数去到 C 的世界 栈&#xff…

外观设计模式

package com.jmj.pattern.facade;public class Light {public void on(){System.out.println("打开电灯...");}public void off(){System.out.println("关闭电灯...");} }package com.jmj.pattern.facade;public class AirCondition {public void on(){S…

STM32入门学习(一):STM32 简介与软件安装

参考引用 STM32 入门教程-江科协 1. STM32 简介 1.1 STM32 套件介绍 1.2 STM32 简介 STM32 是 ST 公司基于 ARM Cortex-M 内核开发的 32 位微控制器 应用&#xff1a;嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 1.3 ARM …

国内20个大模型中文场景测评及体验

中文场景能力测评 SuperCLUE排行榜 大模型及网站 公司&#xff08;大模型&#xff09; 智能程度 借鉴点 体验网站 备注 1 百度文心一言 高   文心一言   2 百川智能 高   百川大模型-汇聚世界知识 创作妙笔生花-百川智能   3 商汤商量SenseChat&#xff…

徕芬不是满分:自称超越戴森,用户称多次故障,品控仍是老大难?

撰稿|行星 来源|贝多财经 “双十一”购物节落下帷幕后&#xff0c;各大品牌纷纷公布“战报”。其中&#xff0c;高速吹风机品牌徕芬&#xff08;也称“徕芬科技”&#xff09;销售额超4.4亿元&#xff0c;全系产品销量超过80万台&#xff0c;高速吹风机系列单品(LF03、SE)销售…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;…

智能联系人管理Python代码

在PyCharm中运行《智能联系人管理》即可进入如图1所示的系统主界面。 图1 系统主界面 具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;添加联系人。在主界面中&#xff0c;单击“添加”按钮&#xff0c;将打开添加联系人窗口&#xff0c;在该窗口中&#xff0c;单…

时间序列预测 — Informer实现多变量负荷预测(PyTorch)

目录 1 实验数据集 2 如何运行自己的数据集 3 报错分析 1 实验数据集 实验数据集采用数据集4&#xff1a;2016年电工数学建模竞赛负荷预测数据集&#xff08;下载链接&#xff09;&#xff0c;数据集包含日期、最高温度℃ 、最低温度℃、平均温度℃ 、相对湿度(平均) 、降雨…

学习笔记:如何分析财务报表

其实财务报表分析最核心的东西&#xff0c;是通过财务报表这个结果&#xff0c;由果推因&#xff0c;找出造成这个结果的原因。 会计是商业的语言 首先第一个问题是——会计是商业的语言&#xff0c;这是会计的根本。 什么叫“语言”&#xff0c;就是可以通过它进行交流。比如…

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

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

手把手教你对禅道接口发起请求-基础版

本章一起来学习如何对禅道的接口发起请求。 &#x1f534;注&#xff1a;本章接口需要自己搭建本地禅道&#xff0c;部署之简单&#xff0c;百度一看就会。如下是官网地址&#xff0c;下载开源版本即可&#xff1a; https://www.zentao.net/ 接口文档 https://www.zentao.net/b…

iar如何全擦芯片内存

Project ->Download -> Erase memory

二年级 最少需要几个刻度?

娃二年级题目&#xff1a;请你设计一把尺子&#xff0c;用这把尺子一次能画出 1~8厘米八条不同长度的线段。最少需要几个刻度&#xff1f; 答&#xff1a;最少需要 5 个刻度&#xff1b; 方案有&#xff1a; 0, 1, 2, 5, 8 0, 1, 3, 7, 8 0, 1, 4, 6, 8 0, 1, 5, 6, 8 0, 1, 5…

burpsuite的大名早有耳闻,近日得见尊荣,倍感荣幸

问题&#xff1a; burpsuite中文乱码何解&#xff1f; burpsuite 与君初相识&#xff0c;犹如故人归。 burpsuite早有耳闻&#xff0c;近日得见真容&#xff0c;果然非同凡响。 Burp Suite is a comprehensive suite of tools for web application security testing. burp …