C语言-printf()函数

prinf()函数的返回值

	/*函数原型 : int printf(const char *restrict format,...); 
	 *	参数:format:指向指定数据转译方式的空终止多字节字符串的指针
	 *	返回值:返回输出到输出流的字符数,若出现输出错误或编码错误,返回一个负值 
	 */ 
	 puts("**********************************************************************");
	 int num=0; 
	 num=printf("Hello China!\n");
	 printf("%d\n",num);

运行结果

Hello China!
13

printf输出的格式: % [标记][输出最小宽度].[精度][修饰符]格式字符(也称转换说明)

#include<stdio.h>
#define WAS "What\'s you name" 
int main()
{
	/*********************标记*********************/
	//	- 		左对齐,右边填空格 
	printf("未使用:*%10d*\t使用:*%-10d*\n\n",100,100); 
	//	+		有符号值若为正,则在其值前显示+号,若为负,则在其值前显示-号 
	printf("%+d\t%+d\n\n",-110,123); 
	//  空格	有符号值若为正,则在值前面显示空格, 若为负值,则在其值前面显示-号 (+标志会覆盖空格标志)
	printf("*% d*\t*% d*\n\n",-123,123);
	//	#		对格式字符%o,在输出时加前缀0,对格式字符%x,加前缀0x,对格式字符%X,加前缀0X	
	printf("%#o\t%#x\t%#X\n",12,11,13);
				//对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G,#防止结果后面的0倍删除
	printf("%#.f\t%.f\n",4.456,4.456);
	printf("%#.e\t%.e\n",4.4e12,4.4e12);
	//	0		对于数值格式,用0代替空格代替空格。对于整数格式,如果出现-标记或指定精度 ,则忽略该标记
	printf("%08d\t%08d\t*%-08d*\t*%08.2f*\n",211,-211,211,211.237);
	printf("%08d\t%08.5d\n\n",211,211); 
	 
	 
	/*************************输出最小宽度********************************/
	//若实际位数多与定义的宽度,则按实际位数输出,若实际位数少于定义的宽度,则补以空格或0
	puts("*******************************************************************");
	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("%.4d\t%.6d\n",234567,2345);		//1.如果输出为整数,表示输出的最小位数,若不足在其值前添加0。 
	
	printf("%.3f\n",3.141592);
	printf("%.9s\n",WAS);
	/*	2.如果输出为实数,表示小数的位数
	 *	  如果输出是字符串,表示输出的字符最大个数
	 *	若实际位数大于所定义的精度,则截去超过的部分 */ 
	printf("%.5g\t%.5g\n",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,%A\n",33.2456,33.2456);
	printf("%%c			单个字符:%c\n",'a');
	printf("%%d、%%i	有符号十进制整数:%+d,%+i\n",-100,100);
	printf("%%e、%%E	浮点数、e计数法:%e,%e\n",100.2,100.2);
	printf("%%g、%%G	根据值的不同,自动选择%%f或%%e,%%e、%%E格式用于指数小于-4或者大于或等于精度时:%g,%G\n",12.3e-6,12.3e-6);
	printf("%%u			无符号十进制数:%u\n",23);
	printf("%%o			无符号八进制:%#o\n",21);
	printf("%%x、%%X	无符号十六进制:%#x,%#X\n",12,12);
	int *a;
	printf("%%p			指针:%#p\n",a);
	printf("%%s			字符串:%s\n",WAS);
	printf("%%			打印一个百分号\n");
    return 0;
} 

运行结果

在这里插入图片描述

动态设置输出宽度和精度

	puts("************************************************************");
	int m,n;
	puts("设置数据最少输出宽度值:"); 
	scanf("%d",&m); 
	puts("设置数据的小数位数:"); 
	scanf("%d",&n); 
	printf("%*.*f\n",m,n,130.79069388);

运行结果

第一次:
设置数据最少输出宽度:
5
"设置数据的小数位数:
3
130.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("发出一声蜂鸣:\007\n");			//八进制值  
	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");

猜你喜欢

转载自blog.csdn.net/liyunyou/article/details/82875384