C语言中多样式的格式控制符的使用详解

 更新时间:2023年03月20日 09:04:25   作者:Gritty wang  
C语言中的格式控制符类型繁多,虽然格式字符可能就那么几个,但组合起来使得格式控制符变得多样化,这对于C语言初学者来说无疑是一种痛苦,为此我将常见的格式控制符类型及意义总结一下,希望对大家有所帮助

C语言中的格式控制符类型繁多,虽然格式字符可能就那么几个,但组合起来使得格式控制符变得多样化,这对于C语言初学者来说无疑是一种痛苦,为此我将常见的格式控制符类型及意义总结一下,这些格式符的用法不需要你立即全部掌握,应当在日后的编程实践中逐步掌握。

先来看一个代码示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int i;
    int temp=1234;
    int arr[5] = { 34,45,-67,89,-68 };
    printf("%#o\n", temp);
    printf("%lo\n", temp);
    for (i = 0; i < 5; i++)
        printf("%d", arr[i]);
    printf("\n");
    for (i = 0; i < 5; i++)
        printf("%-5d", arr[i]);
    printf("\n");
    for (i = 0; i < 5; i++)
        printf("%+4d", arr[i]);
    printf("\n");
 
    return 0;
}

代码运行结果如下:

从上面代码示例中可以看到,printf函数中的格式字符串有多种不同的组合,不同的组合输出内容也不尽相同,它一般是以%开头的字符串,在%后面跟有各种样式的格式字符,以说明输出数据的类型、形式、长度、小数位数等,其 一般形式如下:

%[标志] [输出最小宽度] [.精度] [长度]

其中[]中表示可选项。各项意义介绍如下:

1.标志:标志字符有-、+、#、空格等四种,其所代表的意义如下:

  • -: 当实际位数小于指定位数时,数据在指定宽度内左对齐;多余位数以空格填充。
  • +: 用于在正数之前添加"+",在负数之前添加"-"。

-和+的代码示例如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int i;
    int temp = 1234;
    int arr[3] = { 23,45,68 };
    printf("%d\n", temp);
    printf("%+d\n", temp);
    for (i = 0;i < 3; i++)
        printf("%3d", arr[i]);
    printf("\n");
    for (i = 0;i < 3; i++)
        printf("%-3d", arr[i]);
    return 0;
}

运行结果如下:

#: 对o类,输出时添加前缀o;对x类,在输出时添加前缀0x;对e,g,f类,当结果有小数时才给出小数点,对c、s、d、u类无影响。

#的代码示例如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int temp1 = 1234;
    float temp2 = 3.5;
    printf("%#d\n", temp1);
    printf("%#o\n", temp1);
    printf("%#x\n", temp1);
    printf("%#f\n", temp2);
    return 0;
}

运行结果如下:

2.输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的长度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

3.精度:精度格式符以‘ . ’开头,后跟十进制数。它的含义是:如果输出实数,则表示小数的位数;如果输出的是字符串,则表示输出字符的个数;如果实际位数大于所定义的精度数,则截去超过的部分(四舍五入)。

4.长度:长度格式有h和l两种,h表示按短整型输出,l表示按长整型输出。

叙述了这么多理论知识,相信大家已经对格式字符的多种组合已经有了一个了解,为了让大家对其有一个更加深入的了解,特举一些常用的格式符使用示例如下:

⑴%m.nd: m、n均为正整数,其中m指定输出结果的总位数,n指定实际输出的整数位数。

注意:若整数的实际位数小于n,则用字符0填充;若实际位数大于n,则n不起作用。

代码示例如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    int a = 123;
    int b = -1234;
    printf("%d\n", a);
    printf("%.4d\n", a);
    printf("%5.2d\n", a);
    printf("%.4d\n", b);
    printf("%8.6d\n", b);
    return 0;
}

运行结果如下:

⑵%m.ns: m、n均为正整数。其中m指定输出结果的总位数,n指定实际输出结果的字符个数(从字符串左端截取)。

代码示例如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
    printf("%.3s\n", "good");
    printf("%.4s\n", "good");
    printf("%10.4s\n", "good");
    printf("%.8d\n", "good");
    return 0;
}

运行结果如下:

虽然格式控制符组合繁多,但并不需要死记硬背,只需在一定代码训练后掌握其含义即可。

到此这篇关于C语言中多样式的格式控制符的使用详解的文章就介绍到这了,更多相关C语言格式控制符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c语言实现一个简单日历

    c语言实现一个简单日历

    本文给大家分享的是一则使用C语言来实现的一个简单日历的代码,根据项目需求,实现了3个简单的小功能,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • C++ Boost Container库示例详细讲解

    C++ Boost Container库示例详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • 让我们一起来对C语言指针再分析

    让我们一起来对C语言指针再分析

    这篇文章主要为大家详细介绍C语言的指针,本文进行了深度解析,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C++ 名称空间详情

    C++ 名称空间详情

    当一个项目变得大型之后,我们会引入很多的库,这么一来两个库很可能会定义List、Tree、Node同名的类,编译器要是不考虑这情况的话,程序员调用时就会出现冲突问题。C++提供了名称空间工具,以更好的控制名称的作用域,本文就来谈谈C++ 名称空间,需要的朋友可以参考一下
    2021-09-09
  • c++ 如何在libuv中实现tcp服务器

    c++ 如何在libuv中实现tcp服务器

    这篇文章主要介绍了c++ 如何在libuv中实现tcp服务器,帮助大家更好的理解和使用libuv,感兴趣的朋友可以了解下
    2021-02-02
  • 一文详解C++关键词auto的用法

    一文详解C++关键词auto的用法

    在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,在 C++11中,auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,本文将给大家详细的介绍一下C++关键词auto的用法,需要的朋友可以参考下
    2024-02-02
  • CFile与CStdioFile的文件读写使用方法详解

    CFile与CStdioFile的文件读写使用方法详解

    以下是对CFile与CStdioFile的文件读写使用方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • 对一个数组进行zig-zag重新排列

    对一个数组进行zig-zag重新排列

    本文介绍了“对一个数组进行zig-zag重新排列”,需要的朋友可以参考一下
    2013-03-03
  • 基于c++强制类型转换的(总结)详解

    基于c++强制类型转换的(总结)详解

    本篇文章对C++中的强制类型转换进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C语言堆栈入门指南

    C语言堆栈入门指南

    我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助
    2014-01-01

最新评论