文章目录

  • 一、前景知识
    • 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前加空格的原因解释相关推荐

  1. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)

    C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...

  2. Excel添加宏之 大写字母前加空格

    Excel很强大,但有些时候我们需要完成一些自定义的功能,则需要用到宏,然后在Excel中调用该宏进行执行.现在以 大写字母前加空格为例,实现效果如下图 首先打开要编辑的Excel表格,然后按Alt+ ...

  3. C语言输入end时结束程序,c语言输入eof结束怎么写

    1.C语言里的EOF(结束程序)怎么用 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件 ...

  4. C语言输入字符和字符串

    在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...

  5. C语言 输入字符 ,判断是否为字母(包括大小写)

    大家好!今天来打印一个判断.输入一个字符,编程判断是否为字母(包括大小写). 字母都有对应的ASCII值,所以可以利用这个来进行打印. 如下: 打印的结果是这样的,为什么呢?我们知道,getchar是 ...

  6. C语言输入字符和字符串(所有函数大汇总)

    C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个 ...

  7. c语言--输入字符大写转小写,小写转大写

    //gerchar()和putchar()只能处理单个字符的输入与输出#include<stdio.h>int main () {char ch; //定义一个字符变量ch:printf( ...

  8. C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...

    给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的. /*输入多个字符串以END结束后排序*/ #include #include main() {char a[20][3 ...

  9. C语言输入字符表示退出程序

    int a; printf("请输出一个非零整数:\n"); int reg=scanf("%d",&a); printf("reg=%d\n ...

最新文章

  1. iOS端Socket(二)ProtocolBuffer使用
  2. 23. matlab并行计算原理以及parpool函数
  3. 【转】推荐给初级Java程序员的3本进阶书
  4. JVM有哪些类加载器?
  5. jquery中动态效果
  6. android创建类的包名称,如何知道/配置Xamarin Android生成的程序包名...
  7. GaussDB(for Redis)揭秘:Redis存算分离架构最全解析
  8. [转]jQuery: how to get which button was clicked upon form submission?
  9. linux32-bit是什么意思,怎么查看LINUX系统是32bit还是64bit
  10. cordova android项目自定义插件及使用(二)
  11. Qt Creator使用教程(简明版)
  12. linux 迅雷 命令行,Linux小迅雷:uGet下载工具加速 | 薄荷开源网
  13. vim 保存出错 E45: readonly option is set (add ! to override)
  14. 红米4手机(其它小米应该一样)adb 调试(usb ,tcp)
  15. php crypt md5,PHP crypt()-返回的md5哈希
  16. 对称加密算法AES - ECB模式
  17. 4.26学习记录 AWS 和 DNS
  18. 用python画 pareto front
  19. 微信小程序 支付回调不成功排查步骤
  20. 自顶向下和自底向上的估算方式

热门文章

  1. android 自定义view控件,Android 自定义View——自定义View控件
  2. 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
  3. ElasticSearch 从安装开始_01
  4. 前端_网页编程 跨域与JSONP- 淘宝搜索案例
  5. HTTP状态码415 springboot项目
  6. openlayer xyz加载_webGIS实践:3_1_openlayer展绘点线面注记
  7. python 发邮件 timeout_Python邮件发送/带附件发送
  8. qt自定义行编辑器,用来加载颜色
  9. C语言 全局变量和局部变量区别 - C语言零基础入门教程
  10. opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法