【C语言基础考研向】05 scanf读取标准输入超详解

文章目录

  • 一.scanf函数的原理
    • 样例
    • 问题原因
    • 解决方法
  • 二.多种数据类型混合输入
    • 错误样例
    • 正确样例

一.scanf函数的原理

  C语言未提供输入/输出关键字,其输入和输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入,键盘输入又被称为标准输入。当scanf函数读取标准输入时,如果还没有输入任何内容,那么scanf函数会被卡住(专业用语为阻塞)。下面来看一个例子。

样例

【例】scanf读取标准输入

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

输入:20
输出结果如下:

20

  执行时输入20,然后回车,显示结果如下图所示.为什么第二个scanf函数不会被阻塞呢?其实是因为第二个scanf函数读取了缓冲区中的’\n’,即 scanf(“%c”,&c)实现了读取,打印其实输出了换行,所以不会阻塞.

问题原因

在解决这个问题之前先引入标准输入缓冲区

在这里插入图片描述

  我们输入了一个20和一个回车,程序会依次的从标准输入缓冲区中取出它们,但是值得注意的是,scanf 函数在读取整型数、浮点数、字符串时,会忽略’\n’(回车符)、空格符等字符(忽略是指scanf函数执行时会首先删除这些字符,然后再阻塞) , scanf 函数匹配一个字符时,会在缓冲区删除对应的字符,因为在执行scanf(“%c”,&c)语句时,不会忽略任何字符,所以scanf(“%c”,&c)读取了还在缓冲区中残留的’\n’.

解决方法

在读入字符之前,加入清空缓冲区的语句

fflush(stdin); //清空缓冲区
#include <stdio.h>
int main() {int i = 10;char c;scanf("%d", &i);printf("%d", i);fflush(stdin);scanf("%c", &c);printf("%c\n", c);return 0;
}

输入:20 a
输出结果如图:

20
a


二.多种数据类型混合输入

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

错误样例

#include <stdio.h>
int main()
{
int i,ret;
char c;
float f;
ret=scanf(""%d%c%f"",&i,&c,&f);//要在%c之前加个空格
printf( "i=%d,c=%c,f=%5.2f\n",i,c,f);
return 0;
}

输入: 1 a 3.2
输出结果如下:

i=1,c=,f= 0.00

正确样例

#include <stdio.h>
int main()
{int i,ret;char c;float f;ret=scanf("%d %c %f",&i,&c,&f);//要在%c之前加个空格printf( "i=%d,c=%c,f=%5.2f\n",i,c,f);return 0;
}

输入: 1 a 3.2
输出结果如下:

i=1,c=a,f= 3.20

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

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

相关文章

khbc靶场小记(upload 666靶场)

尝试上传正常的png jpg gif php的格式的文件发现老是提示烦人的消息&#xff08;上传不成功&#xff09;&#xff1b; 通过抓包对MIME进行爆破没爆出来&#xff0c;当时可能用成小字典了&#xff1b; 猜测可能是把后缀名和MIME绑定检测了&#xff1b; 反正也没思路&#xff0c;…

Linux shell美化 zsh+oh-my-zsh+power10k

文章目录 安装zsh安装on-my-zsh安装power10k主题安装power10k将oh-my-zsh主题改为power10k字体 设置安装字体配置字体 power10k配置相关插件安装zsh-autosuggestionszsh-syntax-highlighting安装插件完成&#xff0c;重新加载配置文件 美化效果示意&#xff1a; 安装zsh 安装…

学生护眼台灯哪种好一点?分享专业的学生护眼台灯

当代孩子的学业依旧繁重&#xff0c;而随着孩子年龄的增长&#xff0c;作业功课也会越来越多&#xff0c;每天用眼的时间也会越来越长。而且现在很多孩子晚上都会学习到很晚&#xff0c;如果光源不合适是很容易导致视力下降的&#xff01; 因此我认为一款好的台灯是每个家庭必备…

Peter算法小课堂—并查集

我们先来看太戈编程467题 攀亲戚 题目描述&#xff1a; 最近你发现自己和古代一个皇帝长得很像&#xff1a;都有两个鼻子一个眼睛&#xff0c;你想知道这皇帝是不是你的远方亲戚&#xff0c;你是不是皇亲国戚。目前你能掌握的信息有m条&#xff0c;关于n个人&#xff1a;第i条…

vscode开发java项目

安装java扩展 创建项目 vscode命令行面板搜索java命令行 出现如下提示 No build tools构建项目如下 java项目使用vscode单独打开文件夹&#xff08;工作区中运行有问题&#xff09;&#xff0c;vscode中可直接点击右上角运行按钮执行 maven中spring boot项目 代码错误可以点…

利用IP应用场景API识别真实用户

引言 在当今数字化时代&#xff0c;随着互联网的普及和应用的广泛&#xff0c;验证用户身份的重要性变得越来越突出。在许多场景中&#xff0c;特别是在涉及安全性、用户体验以及个人隐私保护方面&#xff0c;确定用户的真实身份至关重要。而IP应用场景API则是一种强大的工具&…

机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

文章目录 第一关相关知识任务要求代码 第二关相关知识任务要求代码 第三关相关知识注意任务描述代码 第一关 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 在 Python 中使用正则表达式&#xff1b; 最基础正则表达式&#xff1b; 正则匹配函数。 在 Python…

1308. 全排列的结果-深度优先搜索-DFS

代码&#xff1a; #include <iostream> using namespace std; int n; int a[10]; bool r[10]; void print(int k) {for(int i1; i<k; i){cout<<a[i]<<" ";}cout<<endl; } void fun(int k) {for(int i1; i<n; i){if(r[i] false){a[k…

第一讲_HarmonyOS应用开发环境准备

HarmonyOS应用开发环境准备 1. 知识储备2. 环境搭建2.1 安装node.js2.2 配置node.js2.3 安装命令行工具2.4 安装DevEco Studio2.5 配置DevEco Studio 1. 知识储备 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可…

给WordPress网站增加一个带时间的led广告牌

WordPress 后台》外观》小工具》自定义html》添加到合适位置 其他系统可自行添加合适位置 <style type"text/css">.studytextgzbox {background: #F9F9F9; border: 1px solid #999999;margin: 1px;text-align:center; float: left;line-height: 28px;hei…

Qt中ComboBox的简单使用

1.相关说明 combobox中item的文字、data、图片设置 2.界面绘制 3.相关主要代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete …

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测 目录 回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测预测效果基本描述程序设计参考资料 预测效果 基本描…

从0开始python学习-48.pytest框架之断言

目录 1. 响应进行断言 1.1 在yaml用例中写入断言内容 1.2 封装断言方法 1.3 在执行流程中加入断言判断内容 2. 数据库数据断言 2.1 在yaml用例中写入断言内容 2.2 连接数据库并封装执行sql的方法 2.3 封装后校验方法是否可执行 2.4 使用之前封装的断言方法&#xff0c…

关于VScode的这个ssh的配置的经验

1.首先&#xff0c;我是因为重装了ubantu系统&#xff0c;不得不重新配置ssh 2.第一步&#xff0c;在本机的终端安装ssh插件&#xff1a; &#xff08;1&#xff09; &#xff08;2&#xff09;restart开启这个ssh端口 3.然后&#xff0c;就在vscode里面&#xff0c;安装哪个…

使用CSS计算高度铺满屏幕

前言 今天写项目时出现高度设置百分百却不占满屏幕&#xff0c;第一反应看自己设置的是块级元素还是行级元素。看了几篇博客&#xff0c;发现并不能解决问题。脱离文档流的做法都没考虑&#xff0c;前期模板搭建脱离文档流&#xff0c;后面开发会出现很多问题。 以上图片是我…

FindMy技术与相机结合

FindMy是苹果公司提供的设备追踪服务&#xff0c;用来帮助用户定位丢失的设备。自苹果公司开放Findmy网络之后&#xff0c;FindMy技术便与各种生活设备相结合&#xff0c;比如与相机的结合。 想象一下&#xff0c;你正在外出办事或者旅行时&#xff0c;突然意识到相机丢了&…

SSR服务端渲染解决了什么问题?有做过SSR吗?

面试官&#xff1a;SSR解决了什么问题&#xff1f;有做过SSR吗&#xff1f;你是怎么做的&#xff1f; 一、是什么 Server-Side Rendering 我们称其为SSR&#xff0c;意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术&#xff0c;发送到浏览器&#xff0c;然…

Unity关于新手引导中实现遮罩镂空效果

在新手引导每一步中实现可以遮掉其他部分而显示当前需要点击的部分&#xff0c;只需要在每一步引导的时候设置对应的镂空区域的RectTransform.效果如下图&#xff1a; 代码&#xff1a; public class SelfMaskSet : MaskableGraphic, ICanvasRaycastFilter {[SerializeField]p…

React的合成事件

合成事件&#xff1a;通过事件委托&#xff0c;利用事件传播机制&#xff0c;当事件传播到document时&#xff0c;再进行分发到对应的组件&#xff0c;从而触发对应所绑定的事件&#xff0c;然后事件开始在组件树DOM中走捕获冒泡流程。 原生事件 —— > React事件 —— >…

macOS 13(本机)golang程序交叉编译成 ARM架构

## 背景 golang程序&#xff08;JuiceFS&#xff09;需要支持ARM64架构&#xff0c;重新编译&#xff1b; 本地环境&#xff1a;macOS&#xff1a;13 ## 操作 安装交叉编译工具&#xff1a; brew install FiloSottile/musl-cross/musl-cross --with-aarch64 可以在 /usr/l…