printf(详解
优质
小牛编辑
143浏览
2023-12-01
printf()详解
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//01.printf();&sprintf();&fprintf();格式控制字符串详解:
// (1).格式控制字符串的组成:
// 普通字符串+格式控制符
// (2).常见的格式控制字符:
// %f-->%lf-->%llf-->%e-->%g
// %d/%i-->%ld-->%lld-->%u
// %c-->%s
// (3).格式控制字符只能对目标字符串进行左截取,不能
// 实现对目标字符串的右截取操作(无论是使用正负号)
// (4).格式控制字符当中的点儿号(.)使用说明:
// .号用于字符串映射,用于截取多少个字符(只能左截取)
// .号用于实数映射,用于表示保留多少位小数
// [注意:float类型的有效数字位数为6,7位,double类型的有效数字位数为22,23位]
// (5 ).不同printf();函数的使用差别:
// printf();-->打印到命令行|控制台|屏幕
// sprintf();-->打印到字符串,常常用于待使用字符串的组装
// fprintf();-->打印到文件
int main01(void)
{
char inputstr[100] = { 0 };
scanf("%s", inputstr);//输入,给字符串inputstr进行赋值操作
char totalstr[100] = { 0 };
sprintf(totalstr, "color %-.2s", inputstr);//字符串格式化打印,打印到目标字符串当中,将整数,实数,字符串整个到另外一个字符串当中
system(totalstr);
system("pause");
//printf();-->sprintf();-->fprintf();
return 1;
}
//01.凡是使用printf();&sprintf();&fprintf();函数打印的结果都是字符串:
// (1).最终组装的打印结果就是字符串形式
// (2).printf();函数系列说明:
// printf();输出到命令行|控制台|屏幕|网页
// sprintf();输出到字符串
// fprintf();输出到文件
int main02(void)
{
printf("Hello World!!! \n");//打印的最终结果是字符串
printf("a = %d, str = %s \n", 10, "12345abc");//输出到命令行(网页),字符串,文件
printf("c = %d", 10);
system("pause");
return 1;
}
//01.格式控制字符详细说明:
// (1).正负号(+|-):
// 正号(+):表明右对齐,默认右对齐,映射字符串对齐方式
// (2).是否是8进制形式数据:
// 是否指定填充0,默认填充空格,指定填充0
// (3).有效整数部分指定打印的总体宽度
// 总体宽度大于实际宽度:
// 采取填充方式
// 总体宽度小于实际宽度:
// 显示实际宽度
// (4).格式控制字符的截取效果体现:
// 1).只能体现于实数类型映射以及字符串形式的映射
// 针对于实数类型:体现意义为保留多少位小数(四舍五入)
// 针对于字符串型:截取多少个字符进行映射
// 2).截取效果只能是从左往右进行截取(无论正负号)
// (5).点号的作用:
// 针对于实数类型:保留多少位小数(四舍五入)
// 针对于字符串型:截取多少个字符进行映射
int main03(void)
{
printf("%d \n", 10);//有多宽分配多宽
printf("%10d \n", 10);//总体宽度为10
printf("%010d \n", 10);//右对齐,总体宽度为10,空余(左位置)指定填充(零)
printf("%-10d \n", 10);//左对齐,总体宽度为10,空余(右位置)默认填充(空格)
printf("%3d \n", 12345);//m整数,大于实际宽度,填充零(指定)或者空格(默认),否则无效
system("pause");
return 1;
}
int main04(void)
{
printf("%.2f \n", 1.2345);//1.23
printf("%.2f \n", 1.2355);//1.24
char str[100] = "calc1";
printf("%.4s", str);//保留小数点后多少位(实数类型数据),截取多少个字符(字符串类型)
system("pause");
return 1;
}
//01.int类型所占用字节数的特点:
// (1).int类型占用字节数说明
// 16位机器上,int类型和short类型占用字节数一致,都是占用2个字节
// 32位以上的机器,int类型和long类型所占用的字节数一直,都是占用4个字节
// 但是,long类型无论是在16位机器还是32位以上的机器当中都是占用4个字节
// 所以常常使用long类型以替作int类型的拓展性
// (2).整数类型的格式控制字符使用特点:
// int-->%d
// long-->ld
// 区分机器的特点,机器不同,那么解析方式不同,所以建议采用ld进行解析,比较正确一些
int main05(void)
{
long l1 = 12345;
printf("%d, %ld", l1, l1);
system("pause");
return 1;
}
//01.整数的格式控制字符说明:
// (1).格式控制字符打印说明:
// %d|%i-->有符号十进制输出
// %u----->无符号十进制输出
// %o----->八进制整数输出
// %u----->十六进制整数输出
// (2).有无符号的说明:
// 只针对于十进制的整数具备有无符号的说明
int main06(void)
{
int num = -12345678;
printf("%d \n", num);//有符号十进制
printf("%i \n", num);//有符号十进制-->%d|%i效果完全一样
printf("%u \n", num);//无符号十进制打印
printf("%o \n",num);//整数八进制打印输出
printf("%x \n",num);//整数十六进制输出
system("pause");
return 1;
}
//01.单个字符的输出特点:
// 将字符按照单个字符进行输出
// 将字符按照字符串进行输出
int main07(void)
{
//如何输出单个字符?
char ch = 'A';
putchar(ch);//将字符按照字符进行输出
printf("%c", ch);//将字符按照字符串进行输出
char str[100] = "calc";
printf("%s", str);//字符串输出
system("pause");
return 1;
}
int main08(void)
{
char str[100] = { 0 };
//%3c,该格式控制字符的目标是打印3个字符所组成的字符串,
// 总共占用3个位置,其中单个字符占用一个位置,另外剩下两个左位置
//sprintf(str, "color %c%3c", '4', 'f');//格式化:整数,实数,字符串整合到单个字符串当中
//sprintf(str, "color %3c%c", '4', 'f');
sprintf(str, "color %c%c", '3', 'f');
system(str);
printf("%s", str);
system("pause");
return 1;
}
//01.格式控制字符的使用特点:
// (1).格式控制字符针对于字符串映射:
// 1).没有左右对齐概念(正负号+|-)
// 2).只有截取概念(点儿号.)
// (2).格式控制字符针对于实数映射:
// 1).有左右对齐概念(正负号+|-)
// 2).有保留多少位小数概念(正负号+|-)
// 四舍五入的性质
int main09(void)
{
char str[10] = "task";
char newstr[10] = "123list123";
printf("%p", newstr);
char strall[100] = { 0 };
//1.%s%s进行拼接
//2.%.5%s截取,只能从左边开始进行截取(起始位置-->非指针操作)
//3.从某一个地址开始从左往右进行截取(任意位置--->指针操作)
// 10代表宽度
// 负号(-)代表左对齐-->负号针对于字符串的截取无效
sprintf(strall, "%s%.4s", str, newstr + 3);//字符地址的移动实现跳过某一丢段儿
system(strall);
printf("%s", strall);
system("pause");
return 1;
}
int main10(void)
{
double db = 109.7896616253;
printf("%.10f \n", db);//.10小数点后保留十位小数
printf("%30.10f \n", db);//总共30位,保留十位小数(实际位数14位),剩余位数(16位),右对齐(左边儿补16个空格)
printf("%-30.10f \n", db);//总共30位,保留十位小数(实际位数14位),剩余位数(16位),左对齐(右边儿补16个空格)
printf("%030.10f \n", db);//总共30位,保留十位小数(实际位数14位),剩余位数(16位),右对齐(左边儿补16个零)
//针对于实数类型右边儿是否补零却绝有保留的有效位数
printf("%-030.10f \n", db);//总共30位,保留十位小数(实际位数14位),剩余位数(16位),左对齐(右边儿补16个零)-->
system("pause");
return 1;
}
//01.无论是实数还是小数按照%e进行输出:
// 1.其中保留的都是小数点后六位小数,需要进行四舍五入
// 2.%f进行打印的时候实际上也是进行了四舍五入的
// 3.概念区分:
// 有效数字(精确度)-->保留位数(四舍五入)
int main11(void)
{
double db = 1045670500000;
double dbs = 0.0000215001;
printf("%e \n", db);//
printf("%e \n", dbs);//指数输出(实数的输出格式)
printf("%.8f", dbs);
system("pause");
return 1;
}
//02.用于打印实数的控制字符:
// %f-->%e-->%g
int main12(void)
{
//double db = 10456700000000;
double db = 1.234567;
printf("%f\n, %e\n, %g", db, db, db);//g自动选择宽度较短(%f|%e)的一个进行打印
system("pause");
return 1;
}
//03.格式控制字符当中没有%n这个控制字符
int main13(void)
{
int num = 10;
//printf("Hello %n china \n", &num);//%n禁用
printf("num = %d", num);
system("pause");
}