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

C语言空格字符串输入——gets()函数、scanf()函数缺陷以及改进后的gets_s()函数、scanf_s()函数的简单用法(上) **在C语言中,空格字符串输入问题相对而言还是比较“坑”的,所以呢,小编就决定要专门谈一谈这个问题,希望对于初学者能够有所帮助。 该篇主要简述了C语言中gets()函数以及scanf()函数对于空格字符串输入的相关用法,如有误人之处,还请指出,小编定当万分感谢,并加以改进。 C语言的初学者应该十分清楚,在C语言中,对于一般的输入,无论是整形、字符型还是其他类型的数据,在大多数情况下用sc... 阅读详情

学过字符串,我们都知道当输入一串带空格的字符
(通俗的说,就是英语中由一个个单词组成的一句话)时,举个例子,比如my name is aeiou
如果你用scanf直接输入的话,
像这样

 scanf("%s",str);

结果是这样的…

my

由运行结果我们可以看出,它遇到空格就停止读入了。
So 我们一般都选择用gets函数来读入一个带空格的字符串
就像这样

 gets(str);

运行出来是这样的

my name is aeiou

这是因为gets可以读入空格,遇到回车才会停止;而scanf遇到空格、回车和Tab键都会认为输入结束,所以它是不能接收空格的。
但是我们都知道gets是不安全的(尽管我现在还没有遇到过这种情况,但是C++认为gets是不安全的)
So 如果你想用scanf输入一个带空格的字符串的话,也不是不可以,下面就来说一下怎么用。
我们可以这样写

scanf("%[^\n]",str);

这样的话运行结果是

my name is aeiou

不要问为什么,记住这个[^\n]就行了,如果实在想知道的话可以去搜百度
但是你会发现一个问题
请看这个代码(这是一个统计元音字母的题的完整代码)

#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    getchar();
    while(n--) 
    {
C语言scanf()函数读取包含空格字符串 C语言使用"%[^\n]" 这样的格式化符遇到空格继续读取; 阅读详情

相关推荐

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 361

C语言 如何用scanf函数输入空格字符串

scanf的返回值是正确输入的参数个数。scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(1)遇空格、“回车”、“跳格”键;(2)遇宽度结束;(3)遇非法输入。以下这段代码: 遇到空格则判定输入结束,后续不再接收: 只能输入空格的一串字符,且输入字符串超出定义的数组长度,则无法正常输出: 解决方法1:定义多个数组用于存储字符串 方法2:%[]的格式控制法:%[scanfset] scanfset有两种形式:一种是以非“^”字符开头的scanset ,表示在读入字符串时将匹配所有在sc

m0_49442965的博客 1万+

使用ACOLITE对OLCI影像进行大气校正+批处理

使用ACOLITE对OLCI影像进行大气校正+批处理

mrzhy1的博客 7305

C语言中怎么使用scanf函数读取空格

运行上述代码,程序的行为与前面的示例代码相同。这种方式可以更好地控制读取字符的数量,避免了缓冲区溢出的问题。为了避免这个问题,可以在格式字符串中指定最大读取字符数。函数读取输入中的字符,直到遇到换行符为止。它会将匹配到的字符存储到相应的变量中,并在最后添加一个空字符(你可以输入包含空格字符串,例如。函数中用于读取字符串的格式说明符之一。这样即使输入超过了指定的字符数,然后程序会将输入字符串打印出来,包括其中的空格。函数也会自动在缓冲区中添加一个空字符,以防止溢出。)作为字符串的结束符。

路人的博客 4339

scanf读入空格

回车符就会停止读取,并将前面的数据拿出去,而当我们写了[^\n]的时候,我认为就是将scanf停止读取数据的条件进行了修改,让scanf遇到\n的时候停止并读取前面的数据,而遇到其他字符时并不会停止。着这样的猜测我进行了下面的代码测试,发现和我想的大差不差。所以当你第二次使用scanf时,进到那块空间里面,第一个就是\n,所以它立马停止并将前面的数据拿出,所以当我们第二次第三次输入时,其实并没有输入任何东西。我是这样理解的,当我们不写这个[^\n]的时候,scanf就是默认的遇到空格符。

gudu312的博客 4823

scanf()接收空格的方法

解析:scanf()遇到‘\n’不再读取数据,会将缓冲区里面‘\n’之前的字符全部拿走,留下'\n',当下一个scanf()再次读取的时候,遇到缓冲区的'\n',会停止读取,并不会拿走缓冲区的‘\n’,不管后面有几个scanf()都会因为这个‘\n’接收不了字符串,我们要解决缓冲区的这个‘\n’可以使用getchar()将它拿走。C语言的scanf()函数读取字符串时,遇到空格或者‘\n’都是会停止读取字符串的,因此我们在输入空格字符串时就不能直接写scanf("%s",ch);(ch是一个数组名)

m0_68335861的博客 2526

如何使用scanf输入多个空格字符串

字符串处理 写题时使用scanf输入,但是我想优化一下,让程序的的通用性更强一些,故我想使用scanf实现空格字符串输入,但是出现了疑惑,字符串空格输入怎么弄,显然scanf("%s",str);肯定不行,所以我查了资料。    1.  scanf()函数的控制串 函数名: scanf () 功  能: 执行格式化输入 用  法: int scanf(char *format[,a...

yyk219的博客 1万+

使用scanf_s输入得到一行空格字符串

测试环境:VS2012 Update4 测试语言:C++ 测试代码: #include int main(int argc,char* argv[]) { char str[20]; scanf_s("%s",str,18); return 0; } 在第五行下断点,断下之后我们观察一下 str 地址:0x003DF9B8 内容

11:00 啦 7189

scanf 输入空格字符串的一个小trick

C/C++中用scanf 和 cin输入字符串时如果遇到空格会被截断,然而很多时候输入字符串都是需要空格的,这就给我们来了困惑,有的小伙伴可能会用gets或getline等解决,今天给习惯用scanf的小伙伴提供一个小trick。 scanf 输入字符串时,默认回车和空格输入的间隔或结束符号,所以输入空格,tab或者回车的字符串是不可以的,但我们可以利用格...

innocence的博客 453

c语言中字符串输入空格,C语言输入空格字符串

因为:scanf("%s",str); 遇到空格就停止接收后面的字符。scanf("%s",str,10);不能接收空格字符串输入,虽然它的指定长度是10, 但是遇到空格时即使没有满10个字符它也自动结束输入了。所以:1.用 gets() 可以读取空格, 直到回车才会结束输入char str[80];gets(str); //可以读取空格, 回车才会结束输入2.使用"%[^\n]"可...

weixin_36329939的博客 2万+

C语言如何输入空格字符串

C/C++输入空格字符串

wayupwayup的博客 4万+

scanf 接收 空格 输入_【C/C++】【输入】关于scanf输入空格,多次使用

一、C/C++中空格字符串输入C++中的cin和C中的scanf都是遇到空格或回车结束。如果要让scanf接收空格,可以用读入字符集合的方式。%[]char a[100];scanf("%[^\n]",s);//%[]:读入此集合内所限定的字符。**一旦遇到不是此集合内的字符就停止。**//%[^ ]:^表示非二、scanf的多次输入scanf无法连续使用,因为缓冲区不足。1.stdin默认缓...

weixin_33274667的博客 1282

scanf中的一些格式问题(一)——scanf内含空格

scanf函数中空格的分析理解(一)

2301_76146242的博客 1万+

如何输入空格字符串

学习别人的知识

qq_45782480的博客 1万+

scanf()函数如何输入一个空格字符串函数

下面例子摘自《C程序员》

changqiang08的专栏 2万+

C/C++中空格字符串输入

转自:https://blog.csdn.net/circle2015/article/details/70880072问题一:空格字符串输入(c++)对于字符数组方法一:getline()读入整行数据,使用回车键输入的换行符来确定输入结尾。调用方法:cin.getline(str, len)第一个参数str用来存储输入行的数组名称,第二个参数是要读取的字符数。方法二:cin.get(str,...

qq_18548149的博客 633

C语言空格字符串输入(记)

参考:添加链接描述 一般输入scanf("%s",str); //遇到空格就停止接受后面的字符; scanf("%s",str,10);//不接受空格字符串输入,长度指定为10,遇到空格就停了。 所以: gets()可以读取空格,知道回车才会结束输入 char str[30]; gets(str); //可以读取空格,回车结束 使用"%[^\n]"可以接受输入空格字符串,回车结束。 char str[30]; scanf("%[^\n]",str); 可以读取空格,回车结束输入。 ...

weixin_44271578的博客 3541

C语言字符串输入和输出(多种方法,超级详细)

在C语言中常用的字符串输出函数有printf()和puts()函数,常用的字符串输入函数有scanf()和gets()这两个函数,本文就大家系统学习C语言字符串输入和输出。

zdoeo的博客 1942

scanf输入空格会停止的问题

scanf输入空格会停止的问题 问题: 想要输入一段空格字符串,发现后面的程序会停止输入 原因: scanf只有在遇到\n,也就是是回车时才结束输入,但是遇到空格和tab时就会停止读取 解决方法 方法一: 使用字符串函数gets()来进行输入 gets(str); 方法二: 使用scanf scanf( "%[^\n]", str ); ...

归子莫的博客 5853

scanf使用字符串遇见空格不会保存空格问题

使用scanf的时候可能会遇到想要输入字符串的内容里面有空格想要连续保存但是scanf遇见空格会结束。就比如这个代码我想输入qwer 1234但是输出结果就是不一样。

2301_79516209的博客 471
上一篇: ## 《通过预处理数据的方法降低程序时间复杂度》
下一篇: 汉诺塔基础
_ong
博客等级 码龄7年 56粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值