补充:printf(输出)函数有两种输出语句格式,例如:
1.printf(“a”);2.printf(“% ”,a);
从上图的对比中,我们可以看出printf两种格式的输出并无不同,但是一般情况下,第二种格式更为方便也更为常用。
printf函数允许使用%d(整型输出格式符)限制最小宽度,方法如下图所示:
1.printf函数限制最小宽度,当宽度大于最小宽度时,从左到右原样输出。
2.当宽度小于最小宽度时,如下图所示,遵寻右对齐,左补空格的原则。
*上图中使用的%s为字符串输出格式符,一般情况下,输出语句中,%s默认从左到右全部输出,如果限制输入部分字符串,可以采用在%与s之间添加数字,限制输出最大宽度。如下图所示:
我们可以从上图中看出,输出语句并未完全输出,而是按照%s中限制的宽度2输出前两个字符ab,后面的字符不输出。这是%s的限制宽度的用法。
*%s的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符为⽌。所以我们需要注意在输出语句需要用到空格的时候尽量减少使用%s。会出现下图所示的情况:遇到空格读入结束,所以只有hello被存储在了地址中,所以只输出hello。
%s的应用不止限于输出函数,在输入函数中,%s可以作为占位符出现,scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度,因此,储存字符串时,很可能会超过数组的边界,导致出现我们预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,我们可以运用以上方法指定读⼊字符串的最⻓⻓度,写成 %ms ,其中的m是⼀个整数,表⽰读取字符串的最⼤⻓度,在读取完成之后后⾯的字符将被丢弃。因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词等,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串。
*scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \0 。(计算不要忘记\0所占的字符位哦)
*scanf函数的占位符中,除了%c以外,自动忽略起首的空白字符,但%c会不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。效果如下图所示:
从以上3张图我们可以看出:scanf从左到右依次读取数据,将空格也当作数据读入,所以当第三条代码中开头输入三个空格时,看起来程序无输出,实际上是输出了三个空格。 当我们想解决这个问题时,我们可以在%c 前加上⼀个空格,这表⽰跳过零个或多个空⽩字符,这样我们就可以强制跳过空格输出数据了,如下图所示: