补.从零开始学习C语言--scanf的%c前为什么加空格
2013-06-20 14:09
519 查看
#include <stdio.h> int main (void) { int i ; char ch ; scanf("%d",&i) ; scanf(" %c",&ch) ; //这行的%C前有个空格 printf("i = %d\nch = %c\n", i, ch) ; /* 输入100 y 后的输出结果: i = 100 ch = y */ return 0 ; }
有些朋友或许会有疑问,为什么 scanf("
%c",&ch) 中的%c 前面要加一个空格,空格的作用到底是什么…在这里可以告诉大家,%c前面的空格就是用来屏蔽空白符的,但想要弄明白这个问题,必须要知道C语言 scanf() 函数的特性,以及scanf()与缓冲区、标准输入流之间的联系。
但在此之前,我们先介绍两个专业术语。
1、缓冲区
缓冲区是一块存放临时输入数据的内存,我们在键盘上输入数据之所以不会马上显示,就是因为数据存放在了缓冲区,在上面例子中,当我们按下回车键后,缓冲区的数据会传送到标准输入流。
2、标准输入流
标准输入流(stdin)是文件指针,scanf()就是从标准输入流或许数据。 在以后的文章中,会接触到fscanf函数的介绍中详细解释。
以上面代码为例,当执行到scanf()时,开始等待用户输入,当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(\n)一起传送到标准输入流(stdin)中,scanf()就是从标准输入流中或许数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符),如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。
如果能理解上面一段话,那么你应该知道%c前空格的作用了,如果不能,请看看%c前不加空格程序的输出结果。
#include <stdio.h> int main (void) { int i ; char ch ; scanf("%d",&i) ; scanf("%c",&ch) ; printf("i = %d\nch = %c\n", i, ch) ; /* 输入100 : i = 100 ch = */ return 0 ; }
请看上面的程序,我们输入100后,咦,怎么程序中止了,马上输入结果了? 但真的是终止了吗?别忘了,标准输入流中除了100外,还有一个换行符'\n'。 第一次scanf()读取了100后,把'\n'留在了标准输入流,第二个scanf()就从输入流中获取换行符了,由于scanf()函数的特性,空白符直接忽略,因此程序便结束了,第二个scanf()函数看似失效,实际上是执行完毕了。
所以对于scanf()而言,%c是个较为特殊的说明符。 %c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符。读到这,大家应该理解了吧?
相关文章推荐
- C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?
- 4.从零开始学习C语言--C语言的输入(scanf)与输出(printf)
- 19.从零开始学习C语言--枚举
- C语言学习 - 变量为什么要进行初始化
- 从零开始学习C语言开发视频教程在线完整版
- c语言scanf()停止接受输入及scanf("%c",&c)吃掉回车或者空格字符的问题
- C语言学习笔记——scanf("%c",&ch) 读取字符
- 为什么要学习C语言
- 为什么每个程序员都应该学习C语言?
- 在C语言中为什么scanf输入语句,要在变量名前加&呢?
- C语言学习笔记-scanf
- 为什么要学习C语言
- 16.从零开始学习C语言--动态内存分配
- 为什么每个程序员都应该学习C语言?
- C语言scanf函数与空格
- C语言中scanf函数与空格回车
- 【linux c】嵌入式开发为什么选择c语言浅述_学习笔记_006
- 【达内C++学习培训学习笔记系列】C语言之二scanf和选择语句
- 如何从零开始学习c语言,你真的造吗
- 从零开始学习C语言 源代码