如何用scanf输入带空格的字符串

众所周知,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.如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值