转换说明的意义——printf()的返回值和打印较长字符串

160 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

转换说明可以理解为翻译说明。例如,%d的意思是“把给定的值翻译成十进制整数文本并打印出来”。

printf()的返回值

大部分C函数都有一个返回值,这个是函数计算并返回给主调程序的值。例如,C库包含一个sqrt()函数,接受一个数作为参数,并返回该数的平方根。可以把返回值赋给变量,也可以用于计算,还可以作为参数传递。总之,可以把返回值像其他值一样使用。printf()函数也有一个返回值,它返回打印字符的个数。如果有输入错误,printf()则返回一个负值。下面这个例子演示了如何确定函数的返回值。

举个例子

#include <stdio.h>
int main(){
    int bph2o = 212;
    int rv;
    rv = printf("%d F is water's boiling point.\n",bph2o);
    printf("The printf() function printed %d characters.\n",rv);
    return 0;
}

运行结果

Snipaste_2022-08-07_17-51-11.png

从这个例子可以看出,程序用 rv = printf(……);的形式把printf()的返回值赋给rv。因此,该语句执行了两项任务:打印信息和给变量赋值。其次,注意计算针对所有字符数,包括空格和不可见的换行符(\n).

打印较长字符串

有时候printf()语句太长,在屏幕上不方便阅读。如果空白(空格,制表符,换行符)仅用于分隔不同的部分,C编译器会忽略它们。因此,一条语句可以写成多行,只需在不同部分之间输入空白即可。例如:

printf("The printf() function printed %d characters.\n",
        rv);

该语句在逗号和rv之间断行。为了让阅读者知道该行未完,对rv进行缩进。C编译器会忽略多余空白。但是不能在双引号括起来的字符串中间断行。例如,

printf(“The printf() function printed %d 
         characters.\n",rv)

这样写是不对的,无法运行下去。因为字符串常量中有非法字符,在字符串中可以使用\n来表示换行字符,但不能通过按下Enter键产生实际的换行符。

有3种字符串换行的方法:

  • 第一种
printf("Here's one way to print a ");
printf("long string.\n");

使用多个printf()语句。因为第1个字符串没有以\n字符结束,所以第二个字符串紧跟第一个字符串末尾输出。

  • 第二种
printf("Here's one way to print a \
   long string.\n");

用反斜杠和Enter键组合来断行。这使得光标移至下一行,而且字符串中不会包含换行符。其效果是在下一行继续输出。但是,下一行代码必须和程序中的代码一样从最左边开始。如果缩进该行,比如缩进5个空格,那么这5个就会成为字符串的一部分。

  • 第三种
printf("Here's one way to print a" 
   "long string.\n");

用两个双引号括起来的字符串之间用空白隔开,C编译器会把多个字符串看成一个字符串。