精华内容
下载资源
问答
  • 用scanf("%s",array); 的话遇到空格就停止接收后面的字符了,那怎么才能接收带空格的字符串呢? 1.用 gets() ,它可以接收带空格的...使用"%[^\n]" 也是可以接收输入一个带空格的字符串,直到回车结束接收 char buf[...

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

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

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

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

    char buf[10] = {0};

    scanf("%[^\n]",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, 那么结果将会显示乱码!

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

    下面是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

    转载于:https://www.cnblogs.com/AI-Algorithms/p/3390270.html

    展开全文
  • c/c++ 如何输入带空格的字符串

    千次阅读 2018-09-09 17:08:19
    前言 如题所示 c语言情况 常规输入 #include &lt;stdio.h&gt; int main() { char str[10] = {0}; scanf("%s", str); printf("...c语言会自动截断输入的空格 问题 ...

    前言

    如题所示

    c语言情况

    常规输入

    #include <stdio.h>
    
    int main()
    {
        char str[10] = {0};
        scanf("%s", str);
        printf("%s\n", str);
        return 0;
    }
    

    test

    fasdf as
    fasdf

    c语言会自动截断输入的空格

    问题

    1. 输入字符串有空格,无法处理
    2. 输入字符串长度超过字符数组长度,不安全

    改进

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char* argv[])
    {
        char str[10] = {0};
        fgets(str, sizeof(str), stdin);
        if (str[strlen(str) - 1 ] == '\n')
        {
            str[strlen(str) - 1] = '\0';
        }
        printf("%s\n", str);
        return 0;
    }

    test

    fads adfasdfad asda
    fads adfa

    c++情况

    #include <iostream>
    using namespace std;
    
    int main()
    {
        char str[10] = {0};
        cin >> str;
        cout << str << endl;
        return 0;
    }

    test

    10fasd dfa
    10fasd

    改进

    #include <iostream>
    using namespace std;
    
    int main()
    {
        char str[10] = {0};
        cin.getline(str, sizeof(str));
        cout << str << endl;
        return 0;
    }

    test

    dfas 1223434dfsdfadfa
    dfas 1223
    展开全文
  • scanf("%s, str)默认回车和空格作为组输入间隔或结束符号 ...当输入字符串时,字符“c”将被当作当前输入的结束符 char str[50]; scanf("%[^\n]", str); //\n作为字符串输入结束符 printf("%s", str); ...
    1. scanf("%s", str)默认回车和空格作为组输入间隔或结束符号

    利用格式符"%[]"为扫描字符集合
    "scanf("%[^c]",str);其中"c"是一个具体的z字符常量(包括控制字符)。当输入字符串时,字符“c”将被当作当前输入的结束符

    char str[50];
    scanf("%[^\n]", str);		//\n作为字符串输入结束符
    printf("%s", str);
    

    scanf("%[a-z A-Z 0-9]", str)表示只匹配输入是大小写字母和数字,遇到非数字和字母时输入结束

    1. gets()在C++11中已经删除
    2. getline(cin, str)

    str要定义为string类型

    string str;
    getline(cin, str);
    cout << str << endl;
    
    1. cin.get(str, int size)

    遇到回车结束

    char str[50];
    cin.get(str, 50);
    printf("%s", str);			//cout << str;
    
    1. cin.getline(char *str, int size)
    char str[50];
    cin.getline(str, 50);
    cout << str << endl;		//printf("%s\n", str);
    
    1. char *fgets(char *s, int size, FILE *stream)

    s 代表要保存到的内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名
    size 代表的是读取字符串的长度
    stream 表示从何种流中读取,可以是标准输入流 stdin,也可以是文件流;从键盘读取数据的话就是从输入缓冲区中读取数据,即从标准输入流 stdin 中读取数据

    char str[50];
    fgets(str, 7, stdin);
    printf("%s", str);
    

    fgets() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 ‘\0’ 填充
    假如你定义的字符数组长度为 n,那么 fgets() 中的 size 就指定为 n–1,留一个给 ‘\0’ 就行了
    如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 ‘\n’ 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 ‘\0’ 填充。所以此时输出该字符串时 printf 中就不需要加换行符 ‘\n’ 了,因为字符串中已经有了’\n’

    • 字符串类型转换为字符数组c_str()
    char p[50];
    string str {"Hello, World!"};
    strcpy(p, str.c_str());			//将str拷贝复制到p
    printf("%s\n", p);
    
    展开全文
  • C++/C中如何输入带空格的字符串 带空格的字符串输入(c++) 对于string类: getline(cin, str); 对于字符数组 方法一:getline(); 读入整行数据,使用回车键输入的换行符来确定输入结尾。 书写格式: cin.getline(str...

    C++/C中如何输入带空格的字符串

    带空格的字符串输入(c++)
    对于string类:
    getline(cin, str);
    对于字符数组
    方法一:getline();
    读入整行数据,使用回车键输入的换行符来确定输入结尾。
    书写格式:
    cin.getline(str, len);
    第一个参数str用来存储输入行的数组名称,第二个参数是要读取的字符数。
    方法二
    书写格式:
    cin.get(str, len);
    两者都是读取一行输入,直至换行符。
    区别:getline将换行符丢弃,而get()将换行符保留在输入序列里

    带空格的字符串输入**(c语言)**
    C输入使用scanf函数,但scanf默认回车和空格是输入不同组之间的间隔和结束符号,
    所以输入带空格,tab或者回车的字符串是不可以的,解决方法如下 :
    利用格式符“%[]”它的作用为扫描字符集合。Scanf(“%[^c]”,str);
    其中“c”是一个具体的字符常量(包括控制字符)。
    当输入字符串时,字符“c”将被当作当前输入的结束符。
    利用此格式符就可以由编程者自己指定一个输入结束符。

    展开全文
  • C和C++中,用普通的方法输入带空格的字符串时,得不到后续的数据。想要在字符串中包含空格可以使用以下方法: (1)使用正则表达式 scanf("%[^\n]]",str); //接收带空格的字符串 scanf("%[a-z A-Z 0-9]",str) //...
  • 1.第一种方法输入带空格的字符串,最简单的方法: char ch[100] gets(ch); cout 2.第二种方法输入带空格的字符串 #include using namespace std; int main() {  char c;  while(c=cin.get()) //...
  • C语言与c++如何输入带空格的字符串

    万次阅读 2019-05-19 16:46:02
    一、C中(用scanf读入一个带空格的字符串) 样例: #include <stdio.h>int main(){ char s[100]; scanf( "%[^\n]", s ); //注意:连用时一定要加上 getchar() 吸收换行符 printf( "%s\n", s );// printf("%c\n...
  • 机试时候碰到问题,当时脑子卡克到想不出来怎么处理,用了一种贼复杂方法,,现在整理下! C语言 方法1 #include <stdio.h> #include <stdlib.h> int main() { char s[100]; gets(s); ...
  • C/C++中带空格的字符串输入

    万次阅读 多人点赞 2017-04-27 21:33:49
    带空格的字符串输入
  • 有道题要输入带空格的字符串,这在C/C++中很容易实现,但GO中好像并不那么容易。学过C/C++的可能都知道,在C中可以使用gets()函数,在C++可以使用getline()函数来实现输入带空格的字符串。那我们可能要问在GO中有...
  • C/C++中用scanf 和 cin输入字符串时如果遇到空格会被截断,然而很多时候输入... scanf 输入字符串时,默认回车和空格是输入的间隔或结束符号,所以输入带空格,tab或者回车的字符串是不可以的,但我们可以利用格...
  • C/C++中,传统的输入流scanf(“%s”,&str) 和cin>>str,遇到空格会返回空格之前的字符串。但是在很多应用中,我们需要字符串中可以同时包含空格,那么前面的两种方法现在就不可用了,在C/C++中给我们提供了那些...
  • C++如何输入空格的字符串

    万次阅读 多人点赞 2018-10-09 15:38:14
    C++如何输入含空格的字符串 1、scanf函数(包含头文件#include &lt;stdio.h&gt;) scanf函数一般格式为scanf(“%s”,st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格,tab...
  • C读取带空格的字符串和字符数组

    千次阅读 2018-05-04 16:38:49
    读取带空格的输入时应该用的方法:&lt;1&gt;字符串 string: #include &lt;string&gt; string a; getline(cin,a);&lt;2&gt;字符数组 char: 第一种: #include &lt;cstdio&...
  • C++中输入带空格的字符串

    千次阅读 2016-02-29 20:03:33
    欢迎使用Markdown编辑器写博客代码块C++中“cin ”不能接受空格输入,若不考虑用C的方式输入带空格的字符串时,可以通过cin.getlian()函数输入
  • 题目:三个字符串,可以写成二维数组,cs[10][10] 每行读取:gets(cs[i]); 一行读取:scanf(“%s”,字符数组名或指针):scanf(“%s”,cs[i]);#include #include using namespace std; char cs[5][5]; int main

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 280
精华内容 112
关键字:

c输入带空格的字符串