用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

C从控制台(stdin)输入带空格的字符串到字符数组中的更多相关文章

  1. java控制台输入带空格的字符串

    java控制台输入带空格的字符串 Scanner sc = new Scanner(System.in); String str = sc.nextLine();

  2. C语言输入带空格的字符串

    参考:https://blog.csdn.net/vincemar/article/details/78750435 因为: scanf("%s",str); 遇到空格就停止接收后 ...

  3. Day_09【常用API】扩展案例4_将字符串变为字符数组,并将大写字母改为小写,首尾内容不同互换,并将索引为偶数的元素替换

    分析以下需求,并用代码实现 1.键盘录入一个字符串 2.将该字符串变成字符数组(不能使用toCharArray()方法) 3.将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase() ...

  4. Delphi字符串与字符数组之间的转换(初始化的重要性)

    紧接着上篇博客讲解的内容: 将Char型数组转换为string类型还有下面的这种方法 但是我在测试的时候遇到了一些问题,并在下面进行了解释和总结 先说出我的总结 其实我们在学习编程的时候(比如我之前学 ...

  5. 【C#】字符串与字符数组

    字符串与字符数组的相互转换. 字符串转换成字符数组: string ss="abcdefg"; char[] cc=ss.ToCharArray();     字符数组转换成字符串 ...

  6. 字符类型char、字符串与字符数组、字符数组与数据数组区别

    字符类型是以ASCII码值运算的:小写字母比相应的大写字母大32,其中A=65,a=97 Esc键 27(十进制).'\x1B'(十六进制).'\33'(八进制) 转义字符:\0 空字符     AS ...

  7. JavaScript字符串和字符数组

    字符串 字符串与字符数组: 字符串:var a = 'ddd'; 字符数组:var arr = 'f','o','o' 相同点: 1.都是类数组 2.都有length属性 3.都有indexOf()和 ...

  8. java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" ...

  9. 字符串,字符数组(C/C++)

    这个地方困惑我好久了,废话不多说 char c1[]="12345"; char *c2="12345"; string c3="12345" ...

随机推荐

  1. Python面向对象之模块和包

    模块 模块的概念 模块是Python程序架构的一个核心概念 所有以.py结尾的源文件都是一个模块: 模块名也是标识符,需要遵循标识符的命名规则: 在模块中定义的全局变量,类,函数,都是直接给外界使用的 ...

  2. C语言学习13

    快速排序 //快速排序 #include <stdio.h> void quicksort(int a[], int left, int right); void main() { ] = ...

  3. 《算法导论》— Chapter 9 中位数和顺序统计学

    序 在算法导论的第二部分主要探讨了排序和顺序统计学,第六章~第八章讨论了堆排序.快速排序以及三种线性排序算法.该部分的最后一个章节,将讨论顺序统计方面的知识. 在一个由n个元素组成的集合中,第i个顺序 ...

  4. sysctl.conf文件配置详解

    ############################# net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 ########### ...

  5. jar包、war包、ear包傻傻分不清?

    在工作中,需要在jboss上deploy一个health check的war包,因此了解一下: Jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库 ...

  6. xtu summer individual 2 E - Double Profiles

    Double Profiles Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  7. zoj 2886 Look and Say

    Look and Say Time Limit: 2 Seconds      Memory Limit: 65536 KB The look and say sequence is defined ...

  8. 2016阿里校招python研发面试

    一面: 面:说说你们学校的主修课程. 学校开的全是尼玛java课,这个我是想了有一会的. 面:看你简历写了会jquery,来问你个简单的jquery问题 :jQuery支不支持css引入. 呵呵 面: ...

  9. To_Date函数用法

    spl> select * from emp          where dates          between          to_date('2007-06-12 10:00:0 ...

  10. [Vijos] 河蟹王国

    描述 河蟹王国有一位河蟹国王,他的名字叫羊驼.河蟹王国富饶安定,人们和谐相处.有一天,羊驼国王心血来潮,想在一部分人中挑出最和谐的人.于是,羊驼国王将他的子民排成了一列(==!!b汗~好长呀).每个人 ...