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()则读取标准输入流中第一个非空白字符。
c语言输入字符时控制符%c前加空格的原因解释相关推荐
- c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)
C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...
- Excel添加宏之 大写字母前加空格
Excel很强大,但有些时候我们需要完成一些自定义的功能,则需要用到宏,然后在Excel中调用该宏进行执行.现在以 大写字母前加空格为例,实现效果如下图 首先打开要编辑的Excel表格,然后按Alt+ ...
- C语言输入end时结束程序,c语言输入eof结束怎么写
1.C语言里的EOF(结束程序)怎么用 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件 ...
- C语言输入字符和字符串
在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...
- C语言 输入字符 ,判断是否为字母(包括大小写)
大家好!今天来打印一个判断.输入一个字符,编程判断是否为字母(包括大小写). 字母都有对应的ASCII值,所以可以利用这个来进行打印. 如下: 打印的结果是这样的,为什么呢?我们知道,getchar是 ...
- C语言输入字符和字符串(所有函数大汇总)
C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个 ...
- c语言--输入字符大写转小写,小写转大写
//gerchar()和putchar()只能处理单个字符的输入与输出#include<stdio.h>int main () {char ch; //定义一个字符变量ch:printf( ...
- C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...
给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的. /*输入多个字符串以END结束后排序*/ #include #include main() {char a[20][3 ...
- C语言输入字符表示退出程序
int a; printf("请输出一个非零整数:\n"); int reg=scanf("%d",&a); printf("reg=%d\n ...
最新文章
- iOS端Socket(二)ProtocolBuffer使用
- 23. matlab并行计算原理以及parpool函数
- 【转】推荐给初级Java程序员的3本进阶书
- JVM有哪些类加载器?
- jquery中动态效果
- android创建类的包名称,如何知道/配置Xamarin Android生成的程序包名...
- GaussDB(for Redis)揭秘:Redis存算分离架构最全解析
- [转]jQuery: how to get which button was clicked upon form submission?
- linux32-bit是什么意思,怎么查看LINUX系统是32bit还是64bit
- cordova android项目自定义插件及使用(二)
- Qt Creator使用教程(简明版)
- linux 迅雷 命令行,Linux小迅雷:uGet下载工具加速 | 薄荷开源网
- vim 保存出错 E45: readonly option is set (add ! to override)
- 红米4手机(其它小米应该一样)adb 调试(usb ,tcp)
- php crypt md5,PHP crypt()-返回的md5哈希
- 对称加密算法AES - ECB模式
- 4.26学习记录 AWS 和 DNS
- 用python画 pareto front
- 微信小程序 支付回调不成功排查步骤
- 自顶向下和自底向上的估算方式
热门文章
- android 自定义view控件,Android 自定义View——自定义View控件
- 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
- ElasticSearch 从安装开始_01
- 前端_网页编程 跨域与JSONP- 淘宝搜索案例
- HTTP状态码415 springboot项目
- openlayer xyz加载_webGIS实践:3_1_openlayer展绘点线面注记
- python 发邮件 timeout_Python邮件发送/带附件发送
- qt自定义行编辑器,用来加载颜色
- C语言 全局变量和局部变量区别 - C语言零基础入门教程
- opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法