c语言输入字符时控制符%c前加空格的原因解释

文章目录

  • 一、前景知识
    • 1、缓冲区
    • 2、标准输入流
  • 二、scanf语句的执行
    • 1、scanf对于整形%d的输入
    • 2、scanf对于字符%c的输入

   在编一个代码时偶然间发现一个知识盲点…用scanf语句输入字符时需要在控制符%c前加空格。

   在解释相关这个原因前我们需要了解几个相关知识点。

一、前景知识


1、缓冲区

   缓冲区又称缓存,是内存的一部分。内存空间中预留了一定的内存空间,用于缓冲输入或输出的数据。因为计算机对缓冲区的操作大大快于磁盘的操作,因此可以提升计算机的运行速度。


2、标准输入流

   在c语言中,在程序开始运行时,系统会自动的打开标准输入的标准文件,它与终端相联系。系统会定义一个文件指针stdin即标准输入流,来指向终端输入。而scanf语句就是从标准输入流中获取数据。


二、scanf语句的执行


1、scanf对于整形%d的输入

#include <stdio.h>
int main (void)
{int a;scanf("%d",&a);while(a != 0){printf("%d",a);scanf("%d",&a)}return 0;
}

   对于上述的简单代码中,当我们执行到scanf语句时,我们会输入一个整形数字,这个数字会存放到缓存区,当我们以回车结束时,会把数据与换行符"\n"一起传送到标准输入流中。
   对于整形控制符%d作用下的scanf语句,它会从标准流输入中查找数据,跳过空白符(空格、换行符、制表符),直到遇到数字,则开始读入。


2、scanf对于字符%c的输入

   上述控制符%d的输入准则与控制符%c中有所不同,所以相应的代码也就需要作出改变。

#include <stdio.h>
int main (void)
{int a;printf("Do you want to input?(Y/N)")scanf(" %c",&a);while(a == 'Y' || a == 'y' ){printf("Do you want to continue?(Y/N)");scanf(" %c",&a)}return 0;
}

   在上述代码中我们需要在scanf语句中的%c前面加一个空格。如果没有加的话在我们输入第一个字符并以空格结束输入后,该字符与’\n’会一起进入标准流输入,’\n’便会作为第二个scanf语句的内容输入,从而让你的程序出现问题。
   而加空格便会屏蔽空白字符。
   %c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符。


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

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

相关文章

git命令分类图

转载于:https://www.cnblogs.com/hujunzheng/p/5560826.html

python中为什么没有自增或者自减

在c语言和c中我们经常会用到自增或者自减的语句&#xff0c;但对于python中如果运用这种格式便会报错…why&#xff1f; 一、预备知识 小整数池 python中为了提高储存效率&#xff0c;对于int类型的整型变量的储存&#xff0c;有一个专门的小整数池&#xff0c;它会存放-5到256…

数据结构算法模拟系统

一、前言 学习数据结构已经有很长时间了&#xff0c;加上之前搞过一段时间的ACM&#xff0c;虽然搞得并不怎么样吧&#xff0c;但是喜欢的东西不能放弃&#xff0c;一直打算写一个算法模拟系统&#xff0c;对常用的一些算法进行简单的模拟&#xff0c;于是我的毕业设计就这样诞…

python语言map函数及map object at 乱码错误

文章目录一、map函数的简介1、map函数的作用2、语法格式3、举例例1、例2、二、报错一、map函数的简介 1、map函数的作用 对某个序列以给定的函数格式作映射。 2、语法格式 map(function,iterable)   function可以填函数&#xff0c;也可以填数据类型 3、举例 例1、 a [1,2,…

推荐几款jquery图片切换插件

一、前言 毕业季到了&#xff0c;大家都在匆匆忙忙的记录大学里最美好的时光&#xff0c;照片中各种花式、各种姿势都涌现出来了。这么多的照片怎么展示出来给自己的好友看呢&#xff1f;有人选择做成视频&#xff0c;有人选择ps之后做成图片集&#xff0c;而我选择利用静态网页…

c语言表白

马上就要520了&#xff0c;不少小伙伴们一定开始想尽各种办法进行表白了…那么身为奔跑在程序员道路上的我们也一定要有独特的表白方法&#xff01; 下面是一段表白代码&#xff0c;请直接搬去用吧&#xff01;&#xff01;&#xff01; #include <stdio.h> void change…

java注意的一些细节问题

1. 大括弧作用域问题 public static void main(String[] args) {{int x;{int x;//编译错误&#xff1a;Duplicate local variable x}} } 2.boolean值的运算 public static void main(String[] args) {if(true && false) {}if(true & false) {}System.out.println(t…

python表白

马上就要520了&#xff0c;不少小伙伴们一定开始想尽各种办法进行表白了…那么身为奔跑在程序员道路上的我们也一定要有独特的表白方法&#xff01; 下面是一段表白代码&#xff0c;请直接搬去用吧&#xff01;&#xff01;&#xff01; import turtle import timedef hart_ar…

git revert和reset区别

1.在github上建立测试项目并克隆到本地 2.本地中新建两个文本文件 3.将a.txt commit并push到远程仓库 执行 git add a.txt, git commit -m "a.txt", git push 4.将b.txt提交到本地仓库&#xff0c;不执行push 通过gitk命令查看提交历史如下&#xff1a; 情景&#xf…

python基础知识点整理(1)

目录一、变量与数据类型1、变量① 变量的命名规则2、字符串常用的库函数二、列表1、列表的基础定义2、列表常用的库函数3、for循环与列表4、列表切片5、元组三、if语句四、字典1、字典定义2、对字典的操作一、变量与数据类型 1、变量 ① 变量的命名规则 只能包含数字、字母以…

sorl6.0+jetty+mysql搭建solr服务

1.下载solr 官网&#xff1a;http://lucene.apache.org/solr/ 2.目录结构如下 3.启动solr&#xff08;默认使用jetty部署&#xff09; 在path路径下将 bin文件夹对应的目录加入&#xff0c;然后输入 solr start&#xff08;或者 solr start -p port&#xff0c;指定端口启动&am…

Maven中安装本地Jar包到仓库中或将本地jar包上传

摘要 maven install 本地jar命令格式 mvn install:install-file -DgroupId<group_name> -DartifactId<artifact_name> -Dversion<version_no> -Dfile<path_of_the_local_jar> -Dpackagingjar -DgeneratePomtrue 示例 mvn install:install-file -Dgroup…

二维码登录原理及生成与解析

一、前言 这几天在研究二维码的扫码登录。初来乍到&#xff0c;还有好多东西不懂。在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码。一时兴起&#xff0c;决定自己亲手试一试。本人是通过QRCode实现的&#xff0c;下面具体的说一下。 二、二维码原理 基础知…

knockout+echarts实现图表展示

一、需要学习的知识 knockout, require, director, echarts, jquery。简单的入一下门&#xff0c;网上的资料很多&#xff0c;最直接就是进官网校习。 二、效果展示 三、require的配置 require.config.js中可以配置我们的自定义模块的加载。 require.config({baseUrl: ".&…

Maven在Eclipse中的实用小技巧

前言 我们在开发的工程中很多都是Maven项目&#xff0c;这样更加便于我们jar包的管理。而我们一般使用的IDE都是Eclipse&#xff0c;由于我们在日常的开发过程中会经常要用到一些Maven的操作&#xff0c;所以我今天主要跟大家分享一下我们在日常开发中的Maven实用小知识&#x…

React中使用Ant Table组件

一、Ant Design of React http://ant.design/docs/react/introduce 二、建立webpack工程 webpackreact demo下载 项目的启动&#xff0c;参考 三、简单配置 1.工程下载下来之后&#xff0c;在src目录下新建目录“table”&#xff0c;新建app.js&#xff0c;内容如下。 import R…

解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误

一、问题描述 1.错误截图如下。 2.设计的问题 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.6, 结果每次使用Maven > Update project的时候JDK版本都恢复成1.5。 二、原因分析 Maven官方文档有如下描述&#xff1a; 编译器插件用来编译项目的源文件.从3.0版本开始, …

java自定义注解类

一、前言 今天阅读帆哥代码的时候&#xff0c;看到了之前没有见过的新东西, 比如java自定义注解类&#xff0c;如何获取注解&#xff0c;如何反射内部类&#xff0c;this$0是什么意思? 于是乎&#xff0c;学习并整理了一下。 二、代码示例 import java.lang.annotation.Elemen…

解决cookie跨域访问

一、前言 随着项目模块越来越多&#xff0c;很多模块现在都是独立部署。模块之间的交流有时可能会通过cookie来完成。比如说门户和应用&#xff0c;分别部署在不同的机器或者web容器中&#xff0c;假如用户登陆之后会在浏览器客户端写入cookie&#xff08;记录着用户上下文信息…

React使用antd Table生成层级多选组件

一、需求 用户对不同的应用需要有不同的权限&#xff0c;用户一般和角色关联在一起&#xff0c;新建角色的时候会选择该角色对应的应用&#xff0c;然后对应用分配权限。于是写了一种实现的方式。首先应用是一个二级树&#xff0c;一级表示的是应用分组&#xff0c;二级表示的是…