众所周知,scanf函数遇到空格和回车键会结束读取(空格和换行符读不到);
对于这样一个代码:
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)==1)
{
printf("%d",n);
}
return 0;
}
对于这样的输入,当输入1 2 3 4回车时,这些数连同回车被传入缓冲区(shell),当scanf遇到空格时,便结束一个进程,空格并不读入scanf里面,同理,最后面的回车键也是。
当scanf要读取一个字符串时如:
#include <stdio.h>
#include<math.h>
#include<string.h>
int main() {
char a[10];
scanf("%s",a);
printf("%d",strlen(a));
return 0;
}
scanf遇到空格停止,结果只读取了ah
如果要使用scanf输入字符串,并且字符串中可能包含空格,则需要转义字符%[^\n],这样可以输入以换行符为结尾的字符串,而不管它中间是否包含空格
#include <stdio.h>
#include<math.h>
#include<string.h>
int main() {
char a[10];
scanf("%[^\n]",a);
printf("%d",strlen(a));
return 0;
}
这个数组就是 ah 45
类似的办法还有gets()函数
格式:gets(字符数组名);功能:gets函数用于将输入的字符串内容存放到指定的字符数组中,输入结尾的换行符'\n'被换成'\0'存储在该数组中。
C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格用scanf还有哪些要注意
%c前面的空格就是用来屏蔽空白符的,首先必须要知道C语言 scanf() 函数的特性,以及scanf()与缓冲区、标准输入流之间的联系。
在此之前,先介绍两个专业术语。
1.缓冲区
缓冲区是一块存放临时输入数据的内存,我们在键盘上输入数据之所以不会马上显示,就是因为数据存放在了缓冲区,在上面例子中,当我们按下回车键后,缓冲区的数据会传送到标准输入流。
2.标准输入流
标准输入流(stdin)是文件指针,scanf()就是从标准输入流或许数据。 以上面代码为例,当执行到scanf()时,电脑开始执行以下操作:
1开始等待用户输入
2.当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(\n)一起传送到标准输入流(stdin)中,scanf()就是从标准输入流中获取数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符)
3.如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。