scanf读取标准输入

内容

scanf函数的原理

多种数据类型混合输入

常用的数据输入/输出函数

程序员可以给程序输入数据,程序处理后会返回一个输出。C语言通过函数库读取标准输入,然后通过对应函数处理将结果打印到屏幕上,printf函数可以将结果打印到屏幕上。下面详细讲解标准输入函数scanf:

1 scanf函数的原理

C语言未提供关于输入输出的关键字。输入输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入,键盘输入又被称为标准输入。当scanf函数读取标准输入是,如果还没有输入任何内容,那么scanf函数会被卡住(阻塞)。

断点——没有赋值的变量,计算机会直接跳过

代码:

#include <stdio.h>int main(void) {int i;char c;scanf("%d",&i);/*为什么要写%d?实际上scanf是我们往* 标准输入里输的内容全都是字符串,* scanf要根据这个类型例如%d,* 将读到的字符串转成这种类型,存放到这里面*//** 为什么使用变量的取地址?* scanf将从标准输入里读取的数据,* 放入某个变量空间,因此变量必须取地址。*/printf("i=%d\n",i);scanf("%c\n",&c);printf("c=%c\n",c);//输出字符变量c,字符号c要使用%creturn 0;
}

 出现问题:第二次输入出现问题,无结果(有些电脑是直接跳转到"c=",只能输入一次,第二次无法输入)

原因:

解决办法:printf输出i后, fflush(stdin);//清空标准输入缓冲区 

printf("i=%d\n",i);
fflush(stdin);//清空标准输入缓冲区
scanf("%c\n",&c);
printf("c=%c\n",c);//输出字符变量c,字符号c要使用%c
return 0;

但是如果是float就不会发生这种情况:

#include <stdio.h>int main(void) {int i;float f;scanf("%d",&i);printf("i=%d\n",i);scanf("%f",&f);printf("%f\n",f);return 0;
}

原因:scanf函数在读取整型数,浮点数,字符串时,会自动忽略”\n“,空格符等字符(忽略是指scanf函数执行是会首先删除这些字符,然后阻塞),scanf函数匹配一个字符时,会在缓冲区删除对应的字符。因为在执行scanf("%c\n",c);,不会忽略任何字符,所以 scanf("%c",c)读取了残留在缓冲区中的”\n“。

scanf会卡住时因为标准输入缓冲区是空的.

2 多种类型混合输入 

scanf函数一次读取多种类型的数据时,对于字符型数据要格外小心,因为当一行数据中存在字符型数据读取时,读取的字符并不会忽略空格和'\n',所以我们需要在%d和%c之间加入一个空格,(输入的空格与scanf里面的格式空格抵消,如果%c在开头就不需要了)输入格式和输出效果如下图,scanf函数匹配成功了4个成员,我们可以通过返回值来判断scanf函数匹配成功了几个成员,中间任何有一个成员匹配出错,后面的成员都会出错。

#include <stdio.h>int main(void) {int i,ret;float f;char c;ret=scanf("%d %c%f",&i,&c,&f);printf("i=%d,c=%c,f=%5.2f\n",i,c,f);return 0;
}

 

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

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

相关文章

Java项目:基于ssm框架实现的家政服务网站管理系统分前后台(B/S架构+源码+数据库+毕业论文+答辩PPT)

一、项目简介 本项目是一套基于ssm框架实现的家政服务网站管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 二、技术实现 jdk版本&#xff1a;1.…

【jest 运行顺序之 beforeEach/beforeAll】

beforeEach()函数用于在每个测试运行之前运行一段代码。它允许我们在每个测试之前设置共享的测试环境或变量。这样可以确保每个测试都在相同的环境下开始。 beforeAll()函数在所有测试之前只运行一次&#xff0c;所以上下文会有影响。 同理afterEach&#xff0c;afterAll&…

半自动标注(使用自己的分割或检测模型推理完得到的矩阵再生成json文件)

前言 都知道标注很麻烦、很累&#xff0c;不然先训练一批&#xff0c;然后推理得到它的掩码图&#xff0c;先生成自动标注&#xff0c;再人工手动修改也许会快很多 半自动标注代码 这是我自己写的&#xff0c;是labelme的格式&#xff0c;大家想要修改成自己的json格式可以修…

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…

高质量英文文献应该如何查找并且阅读?

1. 查找 使用谷歌学术进行论文关键字检索&#xff0c;查找高度匹配的论文。这里我们可以选择年限等信息进行筛选。作为研究者我们一般选择近三年的文章进行阅读。这里谷歌学术需要科学上网&#xff0c;请大家自行解决。 https://scholar.google.com/ 2. 查看期刊等级 我们查…

每日刷题(1)

1.有一些日期&#xff0c;日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。 样例输入 Copy 11/12/1999 10/21/2003 10/22/2003 02/12/2004 11/30/2005 12/31/2005样例输出 Copy 11/12/1999 10/21/2003 10/22/2003 02/12/2004 11/30/2005 12/31/2005 #include <iostr…

计算机视觉与机器学习之文档解析与向量化技术加速多模态大模型训练与应用

目录 前言1、TextIn文档解析技术1.1、文档解析技术1.2、目前存在的问题1.2.1、不规则的文档信息示例 1.3、合合信息的文档解析1.3.1、合合信息的TextIn文档解析技术架构1.3.2、版面分析关键技术 Layout-engine1.3.3、文档树提取关键技术 Catalog-engine1.3.4、双栏1.3.5、非对称…

2024kali linux上安装java8

1 kali下载Java 8安装包 访问Oracle官网或其他可信的Java下载站点&#xff0c;如华为云的开源镜像站&#xff08;例如&#xff1a;https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz&#xff09;。 确保下载的是与你的Kali Linux系统架构&#xf…

一款专业级别的灵卡技术红外机芯——LC221详解

灵卡科技最新推出的一款高性能红外摄像头组件——LC221。这款独特的设备专为广泛的热点搜索以及热瞄准应用领域而精心打造&#xff0c;旨在为广大用户带来前所未有的智能化体验。下面&#xff0c;让我们详细了解这款新产品的特点与优势吧&#xff01; 首先&#xff0c;让…

latex_diff简单使用方法

1 安装latexdiff 安装perl 下载地址&#xff1a; https://strawberryperl.com/ 安装latexdiff 下载地址 https://www.ctan.org/tex-archive/support/latexdiff 下载好之后解压到下面文件里 C:\Strawberry\perl\bin 2 使用latexdiff 使用latexdiff实际上是为你生成一个.t…

挖掘机可视化:工程施工的智能助手

通过图扑 3D 建模和实时数据监控&#xff0c;提供设备操作的全方位视角。操作员可以从屏幕上直观地观察挖掘机各部分的工作状态&#xff0c;实时掌握挖掘进度和设备健康状况。 此技术提升了施工效率&#xff0c;减少了人为误操作风险&#xff0c;同时还支持远程诊断和维护&…

13、24年--信息系统治理——IT审计

1、IT审计基础 1.1 IT审计定义 无重要的考点,自己读课本了解即可。 1.2 IT审计目的 1)IT审计的目的是指通过开展IT审计工作,了解组织IT系统与IT活动的总体状况,对组织是否实现IT目标进行审查和评价,充分识别与评估相关IT风险,提出评价意见及改进建议,促进组织实现IT目…

C语言:指针(3)

1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; 本质是把字符串 hello bit. ⾸字符的地址放到了pstr中。上⾯代码的意思是把⼀个常量字符串的⾸字符 h 的地址存放到指针变量 pstr 中。 2. 数组指针变量 2.1 数组指针变量是什么&#xff1f; 答案…

活字格如何复制指定单元格中的内容

1、安装插件“复制到剪贴板”后。 2、在需要执行复制的命令中&#xff0c;选择“复制到剪贴板” 3、选择源单元格。 4、执行看效果。

世界500强企业建设软件开发安全体系,打造DevSecOps示范标杆

某世界500强企业旗下拥有众多知名汽车品牌&#xff0c;业务涵盖出行服务、科技创新、金融服务、教育等。该集团一直专注于技术创新和人才培养&#xff0c;同时也是国内第一批倡议并践行“数字化转型”的汽车行业企业。 数智化建设转型&#xff0c;研发安全体系建设势在必行 在…

MES系统主要包括那些功能?

一开始接触MES系统&#xff0c;对MES细条的功能不清楚&#xff0c;这样很正常&#xff0c;因为MES系统相对于其他系统来讲&#xff0c;功能有多又复杂! 作为曾参与200企业MES系统架构的资深从业人员&#xff0c;我给大家选出了一款优秀模板——简道云MES系统&#xff0c;给大家…

Redis教程汇总篇,让你从入门到精通

Redis教程目录 Redis教程(一)&#xff1a;Redis在Windows环境下的安装 Redis教程(二)&#xff1a;Redis在Linux环境下的安装 Redis教程(三)&#xff1a;Redis的五种基本数据类型 Redis教程(四)&#xff1a;Redis中String类型的常用命令 Redis教程(五)&#xff1a;Redis中数…

【Linux】线程机制解析:理解、优势与Linux系统应用

文章目录 前言&#xff1a;1. 线程概念1.1. 什么是线程1.2. 线程得优点&#xff1a;1.3. 线程的缺点线程异常线程的用途 2. 线程的理解&#xff08;Linux 系统为例&#xff09;2.1. 为什么要设计Linux“线程"&#xff1f;2.2. 什么是进程&#xff1f;2.3. 关于调度的问题2…

线性模型快速入门

使用matplotlib画一条直线 import numpy as np import matplotlib.pyplot as pltx np.linspace(-5, 5, 100) y 0.5*x 3plt.plot(x, y, c"orange") plt.title("Straight Line") plt.show()线性模型的直线表示 import numpy as np import matplotlib.py…

并发-sleep更优雅的实现方案:TimeUnit.枚举常量.sleep()

首先给出结论&#xff1a;线程使用中的暂停&#xff0c;建议优先使用TimeUnit类中的sleep()但需要注意传入时间小于0的异常情况TimeUnit是java.util.concurrent包下的一个类名主要功能是暂停线程的操作拥有与Thread.sleep()一样的功能都是暂停线程&#xff0c;但TimeUnit提供了…