有空格字符型数组的输入如何在C/C++中如何实现呢?接下来为大家提供几种方法。
前言
无空格字符型数组可以直接输入和输出,如果数组内存入的字符是一个一个的,也可以通过合理使
用循环语句进行输出,那么包含空格的字符型数组如何输入呢,让我们来学习一下。
一、字符型数组的输入
1.scanf和cin
scanf
代码如下(示例):
#include <cstdio>
int main()
{
char arr[20] = { 0 };//输⼊
scanf("%s", arr);//输出
printf("%s", arr);
return 0;
}
当输⼊"abcdef"的时候,实际上scanf只读取了abc就结束了,也就是相当于遇到空格就结束了。
运行结果如下:
✅这⾥特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个 ⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。 因为 %s 的读取不会包含空白字符,所以⽆法⽤来读取多个单词,除非多个 %s ⼀起使⽤。 这也意味着, scanf() 不适合读取可能包含空格的字符串,比如书名或歌曲名。另外有⼀ 个细节注意⼀下, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个 \0 字符。
同时 scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串 时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,可以 指定读⼊字符串的最长长度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤长度,后⾯的字符将被丢弃。
#include <cstdio>
int main()
{
char name[11];
scanf("%10s", name);
return 0;
}
上面示例中, name 是⼀个⻓度为11的字符数组, scanf() 的占位符 %10s 表⽰最多读取⽤⼾输⼊ 的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的风险了。
可以用 %[n]s 的格式来限制输入的长度。
cin
#include <iostream>
using namespace std;
int main()
{
char arr[20] = { 0 };
cin >> arr;//输入
cout << arr << endl;//输出
return 0;
}
运行截图如下:

结果也是⼀样,没有任何区别。
✅其实cin在读取⼀个字符串的时候,在遇到空白字符的时候,就认为字符串结束了,不再继续往后读取剩余的字符,同时将已经读取到的字符串末尾加上\0,直接存储起来。
解决办法如下:
2.fgets
fgets 也是从第⼀个字符开始读取,最多读取 num-1 个字符,最后⼀个位置留给 \0 ,如果num 的⻓度是远大于输⼊的字符串⻓度,就会⼀直读取到 \n 停⽌,并且会读取 \n ,将 \n 作 为读取到内容的⼀部分,同时在读取到的内容后⾃动加上 \0 。
fgets的格式如下
char * fgets ( char * str, int num, FILE * stream );
char * str 代表数组的名字
int num 代表输入字符串就长度
FILE * stream 代表输入的方式
比如键盘输入就可以写stdin。
代码如下(示例):
#include <cstdio>
int main()
{
char arr[10] = { 0 };
fgets(arr, sizeof(arr), stdin);
printf("%s\n", arr);
return 0;
}
运行结果如下:

3.getchar
代码如下:
#include <cstdio>
int main()
{
char arr[10] = { 0 };
int ch = 0;
int i = 0;
while ((ch = getchar()) != '\n')
{
arr[i++] = ch;
}
printf("%s\n", arr);
return 0;
}
运行结果如下:

注意一点,在使用getchar这个库函数的时候,他的返回值是整形!!!
4.scanf
这个方法不常见,可以忽略,也可以了解一下
代码如下:
#include <cstdio>
int main()
{
char arr[10] = "xxxxxxxx";
scanf("%[^\n]s", arr);
printf("%s\n", arr);
return 0;
}
运行结果如下:

scanf 函数其实也能做到读取带有空格的字符串,只是不常见而已。⽅式就是 将 "%s" 改成 "% [^ \n]s" ,其中在 % 和 s 之间加上了 [ ^ \n] ,意思是⼀直读取,直到遇到\n ,这样即使遇到空格也就不会结束了。 这种⽅式读取,不会将 \n 读取进来,但是在读取到的字符串末尾加上 \0 。
总结
这就是所有有空格字符型数组的输入,感谢观看,祝大家共同进步。

1万+

被折叠的 条评论
为什么被折叠?



