题目链接:
解题思路:
针对于非字符的数据我们有 %nd %m.nf
而对于字符串我们也有其宽度与精度,
- 即 %m.ns
其中的 m 表示的是宽度,即占几列
n 则取用的是字符串的前面几位
- 注意:
%m.ns 要与 %m.nf(这里的 n 表示的是精度) 作出区分
易错点:
因为 scanf 函数在输入时遇到空格时,就会自动的停止对于空格之后的数据读取
- 所以该题目的一个考点:
如何在含有空格的字符串中去读取整行字符串?
可以使用 gets ( ) 函数(该函数只用来读取字符串),
该函数以回车键结束读取,所以遇到空格不会终止输入
- 但是该函数存在一个缺点:
在接收字符串的输入时,
它不会进行数组下标的检查,
所以如果输入字符长度超过字符数组所能容纳的最大空间,编译时不会出错,
但是运行的时候就会出现数组越界,或者内存泄漏
- 而为了解决上述问题,
C++ 里有一个 cin.getline ( ) 函数,里面限制了其存放字符串的字符数组的长度
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char arr[6] = {'0'};
/* string 类型不是C语言的内置类型,所以不能用于 printf 函数*/
//scanf("%6s",arr);遇到空格则停止读入
gets(arr);
printf("%6.3s",arr);
return 0;
}