C/C++中用scanf 和 cin输入字符串时如果遇到空格会被截断,然而很多时候输入的字符串都是需要带有空格的,这就给我们带来了困惑,有的小伙伴可能会用gets或getline等解决,今天给习惯用scanf的小伙伴提供一个小trick。

       scanf 输入字符串时,默认回车和空格是输入的间隔或结束符号,所以输入带空格,tab或者回车的字符串是不可以的,但我们可以利用格式符 “%[]” 。它的作用是扫描字符集合,例如:

char str[1000];
scanf("%[^a]", str);

其中 “a” 是一个具体的字符常量(包括控制字符)。当输入字符串时,字符 “a” 将被当作当前输入的结束符。利用此格式符就可以由编程者自己指定一个输入结束符。

如果想输入一串带空格的字符串,可以将上述的字符 “a”改成“ \n”,即代表着输入一行字符串,遇到换行符时结束。

char str[1000];
scanf("%[^\n]",str);
int len = strlen(str);
for(int i = 0; i < len; i++)
    printf("%c\n",str[i]);