精华内容
下载资源
问答
  • scanf输入字符串遇到空格

    万次阅读 多人点赞 2019-06-02 12:34:49
    使用scanf时对空格处理?问题描述解决办法总结 问题描述 scanf输入字符串(含有空格的字符串,例如:“I love you!”)时,总是在空格处停止扫描。我们用scanf("%s",str);输入 “I love you!” 字符串后,str输出却...

    使用scanf时对空格处理?

    问题描述

    scanf输入字符串(含有空格的字符串,例如:“I love you!”)时,总是在空格处停止扫描。我们用scanf("%s",str);输入 “I love you!” 字符串后,str输出却只有 “I” ,这并不是我们想要的。这是因为scanf扫描到 “I” 后面的空格,就认为对str的扫描结束(即空格没有被扫描),并舍弃后面的" love you!",只得到了 “I” 。

    解决办法

    在这里给出了两种解决办法,可以让空格也被扫描到str里。

    1. gets()函数 ,用gets()替代scanf();
      gets可以无限读取字符串,不会判断上限,以回车结束读取。其用法为gets(s),其中s为字符串变量(字符串数组名或字符串指针)。简单的理解就是读入一串字符(遇到回车结束),存到s中。
    #include<stdio.h>
    int main()
    {
       char str[50];
       gets(str);
       printf("%s\n",str);
       return 0;
    }
    
    1. scanf("%[^\n]",str) ,遇到"\n"结束
      '^'含有非的意思
      “%[^\n]“即遇到\n结束。
      如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo” ,现在能懂这个非的意思了吧…
    #include<stdio.h>
    int main()
    {
    	char str[50];
    	scanf("%[^\n]",str);//"%[^v]"
    	printf("%s\n",str);
    	return 0;
    }
    

    总结

    简单的给出了两种我平时使用scanf时遇到空格的处理方法,希望能对你也有所帮助。

    展开全文
  • shell的printf输出时包含空格问题

    千次阅读 2019-04-15 16:33:58
    printf "%-30s:%-15s\n" report_selinux_enable $report_selinux_enable printf "%-30s:%-15s\n" report_selinux_status $report_selinux_status printf "%-30s:%-15s\n" report_os $report_os printf "%-30s:%-....

    printf "%-30s:%-15s\n" report_selinux_enable $report_selinux_enable

    printf "%-30s:%-15s\n" report_selinux_status $report_selinux_status

    printf "%-30s:%-15s\n" report_os $report_os

    printf "%-30s:%-15s\n" report_hostname $report_hostname

    printf "%-30s:%-15s\n" report_kernel $report_kernel

    printf "%-30s:%-15s\n" report_uptime $report_uptime

    printf "%-30s:%-15s\n" report_date_time $report_date_time

    输出:

    report_selinux_enable :disabled

    report_selinux_status :Disabled

    report_os :GNU/Linux

    report_hostname :centos.com

    report_kernel :3.10.0-693.2.2.el7.x86_64

    report_uptime :42

    days :

    report_date_time :2018-07-18-20-24-23

    可以看出输出的在线天数(report_uptime)的值是42(本来是42 days),下面还有一行显示的有问题,把一行拆成了两行显示,是因为report_uptime的值中间有空格,所以被拆成两行

    解决:printf语句后面的引用值要放在""中

    printf "%-30s:%-15s\n" report_uptime "$report_uptime"

    printf "%-30s:%-15s\n" "report_selinux_enable" "$report_selinux_enable"

    printf "%-30s:%-15s\n" "report_selinux_status" "$report_selinux_status"

    printf "%-30s:%-15s\n" "report_os" "$report_os"

    printf "%-30s:%-15s\n" "report_hostname" "$report_hostname"

    printf "%-30s:%-15s\n" "report_kernel" "$report_kernel"

    printf "%-30s:%-15s\n" "report_uptime" "$report_uptime"

    printf "%-30s:%-15s\n" "report_uptime" "$report_date_time"

    report_selinux_enable :disabled

    report_selinux_status :Disabled

    report_os :GNU/Linux

    report_hostname :centos.com

    report_kernel :3.10.0-693.2.2.el7.x86_64

    report_uptime :42 days

    report_date_time :2018-07-18-20-27-40

    喜欢的点点关注,点点赞。

    对Java技术,架构技术感兴趣的同学,欢迎加QQ群585550789,一起学习,相互讨论。

    群内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频),欢迎加群领取。

    展开全文
  • 如何让scanf()函数正确接受有空格的字符串?如: I love you!    #include  int main()  {  char str[80];  scanf("%s",str);  printf("%s",str);  return 0;  }  输入:...
    如何让scanf()函数正确接受有空格的字符串?如: I love you!
     
    

      

      #include <stdio.h>

      int main()

      {

      char str[80];

      scanf("%s",str);

      printf("%s",str);

      return 0;

      }

      输入:I love you!

      上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:

      #include <stdio.h>

      #include<windows.h>

      int main()

      {

      char str[80], str1[80], str2[80];

      scanf("%s", str); /* 此处输入:I love you! */

      printf("%s\n", str);

      Sleep(5000); /* 这里等待5秒,告诉你程序运行到什么地方 */

      /* 不是sleep(5)

      1,函数名是Sleep不是sleep。

      2,C/C++中,unsigned Sleep(unsigned)应该是毫秒ms.

      */

      scanf("%s", str1); /* 这两句无需你再输入,是对stdin流再扫描 */

      scanf("%s", str2); /* 这两句无需你再输入,是对stdin流再扫描 */

      printf("%s\n", str1);

      printf("%s\n", str2);

      return 0;

      }

      输入:I love you!

      输出:

      I

      love

      you!

      好了,原因知道了,所以结论是:残留的信息 love you是存在于stdin流中,而不是在键盘缓冲区中。那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个 %[] 格式控制符(如果对%[]不了解的请查看本文的上篇),请看下面的程序:

      #include <stdio.h>

      int main()

      {

      char str[50];

      scanf("%49[^\n]", str); /* scanf("%s",string); 不能接收空格符 */

      printf("%s\n", str);

      return 0;

      }

    展开全文
  • scanf输入字符串遇到空格问题

    千次阅读 2020-04-18 17:04:03
    经过调试发现,遇到空格被scanf认为输入完成了,实际上这个字符串输入的是Today 经过查找问题,解决方法有两个:(代码有注释 ) #include <stdio.h> #include <string.h> int main() { int upper=0,...

    今天scanf输入字符串时候,比如输入 Today is 2008/8/8

    经过调试发现,遇到空格被scanf认为输入完成了,实际上这个字符串输入的是Today

    经过查找问题,解决方法有两个:(代码有注释 )

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int upper=0,lower=0,digit=0,space=0,other=0,i=0;
        char *p,s[20];
        printf("input string: \n");
        //scanf("%s",s);   这种方法输入字符串有空格不行的 
    //    gets(s);             解决方法之一 
      scanf("%[^\n]",s);     //解决方法之二 
        p=s;
        while(*p!='\0')
        {
            if(('A'<=*p)&&(*p<='Z'))
            upper++;
            else if(('a'<=*p)&&(*p<='z'))
            lower++;
            else if(*p==' ')
            space++;
            else if((*p<='9')&&(*p>='0'))
            digit++;
            else
            other++;
            p++;
        }
        printf("upper case:%d    lower case:%d",upper,lower);
        printf("      space:%d    digit:%d    other:%d\n",space,digit,other);
        return 0;
    }

    展开全文
  • 由此,我们可以断定,scanf遇到空格就停止读入了。 那么我们应该如何解决这个问题呢? 我们有两种解决方法。 第一种:用gets函数 char str[100]; gets(str); 得到的结果如下: I love you 因为gets可以读入空格,...
  • 遇到printf输出问题

    千次阅读 2016-04-06 22:51:20
    -------------------------------------------------------Sun--------------------------------------------------------------------------- 在牛客遇到此问题: int main() {  int a;  float b,c;  scanf(
  • 我们用scanf()函数输入一个带空格的字符串函数时,经常会在第一个空格时就停止输入。下面有两种方法可以完整输入字符串1)利用strcat()函数来实现带空格字符串的输入,可以用字符串追加函数strcat()来连接每个单词。...
  • 首先明确 scanf的结束标志是空格喝回车键,而gets的结束标志为回车键,输入字符串时,一般采用gets 因此有下面两种方法可以在使用scanf时完整输入字符串 1)利用strcat()函数来实现带空格字符串的输入,可以用...
  • 遇到空格,将字符串倒序输出

    千次阅读 2014-11-20 12:57:36
    #include #include int main() { char a[50]; int k,i,l,j; while(gets(a)!=NULL) { k=0;l=0; for(i=0;i { if(a[i]==' ' || i==strlen(a)) { for(j=i-1;...printf("%c",a[j]); k++; } if
  • 我们用scanf()函数输入一个带空格的字符串函数时,经常会在第一个空格时就停止输入。 下面有两种方法可以完整输入字符串 1)利用strcat()函数来实现带空格字符串的输入,可以用字符串追加函数strcat()来连接每...
  • scanf的读取原理是匹配字符,当scanf从缓冲区读取数据时遇到空格和回车键则会认为读取完毕 因此有以下几种方式解决 (1)使用gets(buf); 替换scanf("%s",buf);即可,但是编译时系统会报警告,说它不安全,因为...
  • //但是你输入的是整数的时候,它不会吧空格识别为结束符  /* 给某个单词定位,并输出他的位置--------------*/ #include #include #include int main() {  int N,i=0,n=0; // char...
  • C printf() 详解之终极无惑

    万次阅读 多人点赞 2016-08-24 20:01:53
    1.printf()简介 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型: int printf ( const char ...
  • 杂笔:输入输出函数

    2021-08-10 17:24:59
    杂笔:输入输出函数一,字符串输入输出函数1.scanf和printf的使用2.puts和gets3.string...特点:printf遇到空格字符不会停止,scanf则会停 2.puts和gets 此类型只能用于字符数组的输入输出,格式为: char b[100]; ge
  • 先提一下 scanf遇到空格符 回车符是会自动忽略的 并放在缓冲区。遇到回车符会停止scanf的读取的。值得一提的是scanf在读取%c字符时还是会读取空白符也就是空格符,其他时候都是默认跳过空白符直到遇到非空白符进行...
  • printf函数详解

    2015-09-11 19:16:28
    printf函数详解
  • printf 和 scanf

    2018-12-29 16:52:12
    如何用printf输出‘\n’ printf("\\n"); 据说编译器会把双斜线\\理解成单个字符\ 哪位知道为什么的望告知 如何用printf输出’%d’ printf("%c%c\n",'%','d'); pirntf中0的用处 ...
  • C 【printf 和 scanf 函数的使用】

    千次阅读 2016-04-02 17:08:38
    对于printf函数,我们主要要掌握printf函数的输出格式。  而对于scanf函数,我们则要知道几个输入过程中的错误输入情况和scanf函数的实现原理。  (1)printf 函数  printf 中 格式控制 部分 的完整格式:...
  • 在写的时候关于有一些题目输出时要求末尾不加空格,我发现可以通过bool类型去解决。 例如hdu2099题: Problem Description 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢...
  • 又是一个和字符串有关的问题……problem:输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数...
  • printf()输出格式详解
  • printf用法整理

    2016-05-15 12:00:36
    //当遇到%hd或%hu输出,注意它们的取值范围 int d = 32767 ; printf ( "%hd\n" ,d); //%hd只支持输出-32768~32767(65536个数字)间的数,超过了会自动转成这个范围内的数。如32768 == -32768,32769 == -...
  • http://bbs.bccn.net/thread-367153-1-1.html  可能是没有cin输入 判断字符串为空: bool empty() const;  The member function returns true for an empty controlled sequence. ...printf("empty")
  • Printf中的行缓冲以及让printf输出

    千次阅读 2016-07-16 09:59:04
     行缓冲:当缓冲区满时不会自动刷新且无法继续输入,需要按回车才可以刷新缓冲区当在输入和输出中遇到换行符时执行真正的 I/O 操作。这时我们输入的字符先存放在缓冲 区等按下回车键换行时才进行实际的 I/O 操作。 ...
  • printf 和 scanf 的使用

    2016-07-14 15:41:27
    printf和scanf常常被使用,我也查阅写资料了解了部分printf和scanf的使用。要是有新发现继续更新。 要了解printf,首先要知道printf是一个行缓冲,也就是满一行输出,只有两种情况不满一行也输出,一是程序结束时,...
  • printf输出格式

    2019-08-08 08:05:57
    格式控制字符串format format-- 是字符串,包含了要被写入到标准输出 stdout 的...printf的格式控制字符串format组成如下: %[flags][width][.prec][length]type 即:%[标志][最小宽度][.精度][类型长度]类型 1.pr...
  • printf()用法详解

    万次阅读 多人点赞 2018-05-07 20:04:40
    1.printf()简介printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int printf ( const char * format, ... );...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,527
精华内容 15,010
关键字:

printf遇到空格