当前位置: 首页 > 文档资料 > C 语言程序设计 >

printf(详解

优质
小牛编辑
147浏览
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");
}