C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?用scanf还有哪些要注意?
%c前面的空格就是用来屏蔽空白符的,
首先必须要知道C语言 scanf() 函数的特性,以及scanf()与缓冲区、标准输入流之间的联系。在此之前,先介绍两个专业术语。
1.缓冲区
缓冲区是一块存放临时输入数据的内存,我们在键盘上输入数据之所以不会马上显示,就是因为数据存放在了缓冲区,在上面例子中,当我们按下回车键后,缓冲区的数据会传送到标准输入流。
2.标准输入流
标准输入流(stdin)是文件指针,scanf()就是从标准输入流或许数据。
以上面代码为例,当执行到scanf()时,
电脑开始执行以下操作:
开始等待用户输入
2.当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(\n)一起传送到标准输入流(stdin)中,
scanf()就是从标准输入流中或许数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符)
3.如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。
使用scanf注意事项
1.参数的个数一定要对应
2.输入的数据类型一定要和所需要的数据类型一致
3.每次调用完scanf后,记得调用一个getchar()函数
扩展资料
1.函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
2.函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。
每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
参考资料
加空格屏蔽了空白字符。
%c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符。
使用scanf函数时应该注意的问题:
scan:扫描 f :format,格式
1、整数和小数分别使用使用控制符%d %lf 表示(float除外,用%f)。
2、参数前面使用&符号,&号前要空格。
3、scanf输入语句中替换符后不能加空格,也不能加\n。
4、scanf()中的变量必须使用地址。
5、scanf()的格式控制串可以使用空白字符或其它非空白字符,使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。使用非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
6、在用"%c"输入时,空格和“转义字符”均作为有效字符。
扩展资料:
(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
(4) scanf函数中没有类似printf的精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
(5) scanf中要求给出变量地址,如给出变量名则会出错
如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。
参考资料:百度百科——scanf
如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔。
“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
比如scanf(" %c" ,&c);
你输入了' a'(a前面有个空格),a就能被c接受。但控制符前如果没空格,那c就接受了空格,明白了没?这个可以防止误操作,忽略空格输入,接受第一个非空格输入。
扩展资料:
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。
在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
参考资料:百度百科:scanf
空格确实不是必须的,但有了空格就可以忽略你输入的空格。
例如:scanf(" %c" ,&c),你输入了' a'(a前面有个空格),a就能被c接受。
但控制符前如果没空格,那c就接受了空格,这个可以防止误操作,忽略空格输入,接受第一个非空格输入。
注意事项:
对于scanf()而言,%c是个较为特殊的说明符。 %c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符,屏蔽了空白字符。
扩展资料:
scanf
C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。
但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。理论上你只需要定义一个字符指针,然后scanf每次读入字符存储到该指针所指的存储空间,之后指针值自动加1。
参考资料:百度百科C语言
空格确实不是必须的,但有了空格就可以忽略你输入的空格,懂我的意思吗?
比如scanf(" %c" ,&c);
你输入了' a'(a前面有个空格),a就能被c接受。但控制符前如果没空格,那c就接受了空格,明白了没?这个可以防止误操作,忽略空格输入,接受第一个非空格输入!