scanf解决遇到空格停止问题

本文介绍了如何在scanf遇到空格时继续输入字符串,方法包括使用gets函数以及通过修改scanf的扫描集,如使用%[非换行符]s来接收包含空格的完整字符串。
摘要由CSDN通过智能技术生成

scanf解决遇到空格停止问题

我们经常输入字符串的时候,遇到空格,scanf就会停止:
比如这时候我想输入一个句子:“My Love”:

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%s", s);
	  printf("%s\n", s);

在这里插入图片描述
这个时候我们有两种方法:一种是用gets,另一种方法是修改scanf的停止符

gets

在这里插入图片描述gets是从标准输入中提取字符串,以换行符为结束标志:

      char* s = (char*)malloc(sizeof(char)*100);
      //scanf("%s", s);
	  gets(s);
	  printf("%s\n", s);

在这里插入图片描述

修改scanf的停止符

如果我们去查手册的话,会发现scnaf的手册有这么一个东西:
在这里插入图片描述其实我们之前只是简单的使用了scanf并没有深入研究它究竟可以带哪些参数。在这里,我们找到这样的一行:
在这里插入图片描述这里scanset我们称为扫描集,这里的brackets就是指这个方括号里面的东西,第一个方框里的意思就是,scanf只接受方括号里面的东西,其他的一律不会被接受,我们来看个例子:

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%[My Beautiful girl]s", s);
	  printf("%s\n", s);

这时候我输入girl:

在这里插入图片描述因为我的扫描集里只有My Beautiful girl scanf只会将读到的字符串跟这个扫描集作比较,相符的就输出,不相符的就不输出。而且注意,如果字符串中有部分匹配就立刻停止检查,不会继续往后扫描:

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%[MyBeautifulgirl]s", s);
	  printf("%s\n", s);

在这里插入图片描述
说完了第一个框里的,第二个框里的就很容易理解了,第二个框里的就是不是方括号号里的scanf会接受,如果是就停止
现在我将方括号里的扫描集取反:

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%[^MyBeautifulgirl]s", s);
	  printf("%s\n", s);

在这里插入图片描述
现在scanf只找不是方括号里的内容,所以会出现乱码的情况。

现在我们知道了原理,现在我们知道,我们默认的scanf的设置其实是这样的:

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%[^ ]s", s);
	  printf("%s\n", s);

scanf接收非空格的内容,如果是则停止:
在这里插入图片描述
现在我们想让scanf接收一个完整的可以带有空格的字符串,很简单:将扫描集中的内容改为非换行

      char* s = (char*)malloc(sizeof(char)*100);
      scanf("%[^\n]s", s);
	  printf("%s\n", s);

现在scanf接收非\n的内容,遇到\n结束,我们的字符串就是以\n结束的:
在这里插入图片描述
这样就好啦~,注意一下这种方法适合于scanf家族,比如scanf,fscanf,sscanf等等。

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值