zoukankan      html  css  js  c++  java
  • C从控制台(stdin)输入带空格的字符串到字符数组中

    用scanf("%s",array); 的话遇到空格就停止接收后面的字符了,那怎么才能接收带空格的字符串呢?

    1.用 gets() ,它可以接收带空格的字符串, 直到回车才结束输入

    char buf[80]={0};
    gets(buf);   //可以读取空格, 回车结束输入

    2.使用"%[^ ]" 也是可以接收输入一个带空格的字符串,直到回车结束接收

    char buf[10] = {0};

    scanf("%[^ ]",buf); //可以读取空格,回车结束输入

    注意:scanf_s("%s",buf,10); 不能接收带空格的字符串输入,虽然它的指定长度是10, 但是遇到空格时即使没有满10个字符它也自动结束输入了。

    […]和[^…]是scanf中一种很少见到但是很有用的转换字符串

    #include <stdio.h>

    main()

    {

    char strings[100];

    scanf("%[1234567890]”,strings);

    printf(“%s”,strings);

    return (  0 );

    }

    运行输入:125eqe后, 打印结果是 125.

    它的作用是从输入的第一个字符开始算起,到地n个字符如果都是中括号中的字符,而第n+1个字符不是这个中括号中的字符,则提取前面n个字符,并自动添加一个结束符号,此外第n+2个算起不管是不是这个中括号中的字符,都不再提取。如:

    scanf("%[1234567890]",strings ); 如果输入123567ascds3838 那么输出的结果是:123567  而不是:1235673838 。 要注意的是:面对scanf("%[1234567890]",strings); 输入的第一个字符必须是这个中括号中的数字它才开始提取,否则将输出乱码,如输入:adc123djfdj8907907, 这里输入的第一个字符是字符而不是中括号中的数字,那么将输出乱码,而不是把后面的那些数字输出来!

    还有需要注意: 方括号两边不能有空格,如scanf("%[  123  ]",strings); 这样是错误的,最终得不到正确的结果的,此外如果想把输入的字符中当碰到数字就截断时可以使用如下形式:

    scanf("%[^1234567890]",strings) ; 这样当输入的字符中遇到包含中括号的数字时就自动结束接收,例如输入:-=-=sakjfd123, 那么打印strings的结果将是::-=-=sakjfd, 但是要注意如果一开始就输入数字那么就会显示乱码,如输入:1265423sdjfksdkf, 那么结果将会显示乱码!

    "%[^ ]" 之所以能接收带空格的输入,是因为它接收所以的字符输入只要不输入 (即回车键的转义符)它就一直接收,直到超过变量能够接收的长度,遇到 则自动结束输入操作。

    下面是MSDN的scanf格式参数的允许情况,注意%[]在最后

    Conversion Argument Conversion
    Specifier Type Function Base
    %c char x[]
    %lc wchar_t x[]
    %d int *x strtol 10
    %hd short *x strtol 10
    %ld long *x strtol 10
    %e float *x strtod 10
    %le double *x strtod 10
    %Le long double *x strtod 10
    %E float *x strtod 10
    %lE double *x strtod 10
    %LE long double *x strtod 10
    %f float *x strtod 10
    %lf double *x strtod 10
    %Lf long double *x strtod 10
    %g float *x strtod 10
    %lg double *x strtod 10
    %Lg long double *x strtod 10
    %G float *x strtod 10
    %lG double *x strtod 10
    %LG long double *x strtod 10
    %i int *x strtol 0
    %hi short *x strtol 0
    %li long *x strtol 0
    %n int *x
    %hn short *x
    %ln long *x
    %o unsigned int *x strtoul 8
    %ho unsigned short *x strtoul 8
    %lo unsigned long *x strtoul 8
    %p void **x
    %s char x[]
    %ls wchar_t x[]
    %u unsigned int *x strtoul 10
    %hu unsigned short *x strtoul 10
    %lu unsigned long *x strtoul 10
    %x unsigned int *x strtoul 16
    %hx unsigned short *x strtoul 16
    %lx unsigned long *x strtoul 16
    %X unsigned int *x strtoul 16
    %hX unsigned short *x strtoul 16
    %lX unsigned long *x strtoul 16
    %[...] char x[]
    %l[...] wchar_t x[]
    %% none

  • 相关阅读:
    Sublime Text 2 实用快捷键[Mac OS X]
    SublimeText2 快捷键一览表
    sublime text 3 快捷键大全以及配置编译环境
    解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    PHP中include和require的区别详解
    Call to undefined function imagettftext()解决方法
    mysql单引号和双引号的用法
    php.ini 配置文件的深入解析
    《JavaScript设计模式与开发实践》—— 代理模式
    《JavaScript高级程序设计》—— DOM
  • 原文地址:https://www.cnblogs.com/AI-Algorithms/p/3390270.html
Copyright © 2011-2022 走看看