prinf()函数的返回值 /*函数原型 : int printf(const char *restrict format,...); *参数:format:指向指定数据转译方式的空终止多字节字符串的指针 *返回值:返回输出到输出流的字符数,若出现输出错误或编码错误,返回一个负值 */ puts("**********************************************************************"); int num=0; num=printf("Hello China!n"); printf("%dn",num); 运行结果 Hello China!13 printf输出的格式: % [标记][输出最小宽度].[精度][修饰符]格式字符(也称转换说明) #include<stdio.h>#define WAS "What's you name" int main(){/*********************标记*********************///- 左对齐,右边填空格 printf("未使用:*%10d*t使用:*%-10d*nn",100,100); //+有符号值若为正,则在其值前显示+号,若为负,则在其值前显示-号 printf("%+dt%+dnn",-110,123); // 空格有符号值若为正,则在值前面显示空格, 若为负值,则在其值前面显示-号 (+标志会覆盖空格标志)printf("*% d*t*% d*nn",-123,123);//#对格式字符%o,在输出时加前缀0,对格式字符%x,加前缀0x,对格式字符%X,加前缀0Xprintf("%#ot%#xt%#Xn",12,11,13);//对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G,#防止结果后面的0倍删除printf("%#.ft%.fn",4.456,4.456);printf("%#.et%.en",4.4e12,4.4e12);//0对于数值格式,用0代替空格代替空格。对于整数格式,如果出现-标记或指定精度 ,则忽略该标记printf("%08dt%08dt*%-08d*t*%08.2f*n",211,-211,211,211.237);printf("%08dt%08.5dnn",211,211); /*************************输出最小宽度********************************///若实际位数多与定义的宽度,则按实际位数输出,若实际位数少于定义的宽度,则补以空格或0puts("*******************************************************************");printf("*%d*t*%d*t[%s]n",-78,65535,WAS);printf("*%4d*t*%4d*t[%25s]n",-78,65535,WAS); printf("*%-4d*t*%-4d*t[%-25s]n",-78,65535);printf("*%+4d*t*%+4d*n",-78,65535);printf("*%#4x*t*%#4X*n",-10,10); printf("*%05.1f*t*%05.1f*n",-2.1,34.3456); printf("*% 4d*t*% 4d*n",-78,65535); /***********************精度***************************************//*精度修饰符以"."开头,后面跟十进制整数。*/ puts("***********************************************************"); printf("%.4dt%.6dn",234567,2345);//1.如果输出为整数,表示输出的最小位数,若不足在其值前添加0。 printf("%.3fn",3.141592);printf("%.9sn",WAS);/*2.如果输出为实数,表示小数的位数 * 如果输出是字符串,表示输出的字符最大个数 *若实际位数大于所定义的精度,则截去超过的部分 */ printf("%.5gt%.5gn",1.255555e13,2.3456789);//对%g或%G转换,表示有效数字最大位数 /*****************************修饰符********************************/puts("*********************************************************");// h和整型转换说明一起使用,表示short int或 unsigned short int类型的值// hh和整型转换说明一起使用,表示signed char或unsigned char 类型的值// j和整型转换说明一起使用,表示intmax_t或uintmax_t类型的值。// l和整型转换说明一起使用,表示long int或unsigned long int类型的值// ll和整型转换说明一起使用,表示longlong int或unsigned long long int类型的值 // L和浮点转换说明一起使用,表示long double类型的值// t和整型转换说明一起使用,表示ptrdiff_t(两个指针差值)类型的值 // z和整型转换说明一起使用,表示size_t类型的值 /******************************转换说明*************************/ puts("*************************************************************"); printf("%%a、%%A浮点数、十六进制和p计数法:%a,%An",33.2456,33.2456);printf("%%c单个字符:%cn",'a');printf("%%d、%%i有符号十进制整数:%+d,%+in",-100,100);printf("%%e、%%E浮点数、e计数法:%e,%en",100.2,100.2);printf("%%g、%%G根据值的不同,自动选择%%f或%%e,%%e、%%E格式用于指数小于-4或者大于或等于精度时:%g,%Gn",12.3e-6,12.3e-6);printf("%%u无符号十进制数:%un",23);printf("%%o无符号八进制:%#on",21);printf("%%x、%%X无符号十六进制:%#x,%#Xn",12,12);int *a;printf("%%p指针:%#pn",a);printf("%%s字符串:%sn",WAS);printf("%%打印一个百分号n"); return 0;} 运行结果 动态设置输出宽度和精度 puts("************************************************************");int m,n;puts("设置数据最少输出宽度值:"); scanf("%d",&m); puts("设置数据的小数位数:"); scanf("%d",&n); printf("%*.*fn",m,n,130.79069388); 运行结果 第一次:设置数据最少输出宽度:5"设置数据的小数位数:3130.791第二次:设置数据最少输出宽度:10"设置数据的小数位数:5 130.79069 转义序列 //使用特殊的符号序列表示一些特殊的字符。这些符号序列叫作转义序列(escape sequence)puts("********************************************************************");printf("a警报字符,发出一声蜂鸣n");printf("把活跃位置v移至下一个垂直制表点n把活跃位置f移至下一页的开始处n");//v垂直制表符 和f换页字符,在PC屏幕上会生成奇怪的符号,光标并不会移动,只有将其输出到打印机上时才会产生描述的效果getchar(); printf("换行符,把活跃位置移至下一行的开始处n");getchar();printf("回车符,把活跃位置移动到当前行的开始处:r");getchar(); printf("水平制表符t,把活跃位置移动到下一个水平制表点(通常是第一个、第九个、第十七个、第二十五个等字符位置)"); getchar(); printf("退格符:b,把活跃位置向前移动一个位置");getchar(); printf("\反斜杠'单引号"双引号问号");getchar();printf("发出一声蜂鸣:07n");//八进制值 printf("x31"); //十六进制数 printf打印较长的字符串 //1.使用多个printf语句 printf("如果空白(空格、制表符、换行符)仅用于分隔不同的部分,"); printf("C 编译器会忽略它们。因此,一条语句可以写成多行,"); printf("只需在不同部分之间输入空白即可。n"); //2.用反斜杠()和Enter(或Return)键组合来断行 printf("用反斜杠()和Enter(或Return)键组合来断行。这使得光标移至下一行,而且字符串中不会包含换行符。其效果是在下一行继续输出.但是,下一行代码必须和程序清单中的代码一样从最左边开始。如果缩进该行,比如缩进5个空格,那么这5个空格就会成为字符串的一部分。n"); //ANSI C引入的字符串连接。在两个用双引号括起来的字符串之间用空白隔开,C编译器会把多个字符串看作是一个字符串。 printf("ANSI C引入的字符串连接" "在两个用双引号括起来的字符串之间用空白隔开" "C编译器会把多个字符串看作是一个字符串。n");