C/C++ 格式说明符及其用法

 更新时间:2025年05月22日 16:21:44   作者:暮色尽染  
在 C/C++ 中,格式说明符(Format Specifiers)主要用于 printf()、scanf() 等输入输出函数中,用于控制数据的格式化输入和输出,下面给大家介绍C/C++ 格式说明符及其用法,感兴趣的朋友一起看看吧

在 C/C++ 中,格式说明符(Format Specifiers)主要用于 printf()scanf() 等输入输出函数中,用于控制数据的格式化输入和输出。以下是常见的格式说明符及其用法:

一、基础格式说明符

说明符适用数据类型描述
%dint十进制整数(带符号)
%uunsigned int十进制无符号整数
%ffloat浮点数(默认保留6位小数)
%lfdouble双精度浮点数(printf中可用%f代替,但scanf必须用%lf
%cchar单个字符
%schar* (C 字符串)字符串(需以 \0 结尾)
%pvoid*指针地址(十六进制格式,如 0x7ffeeb0b4d60
%xint, unsigned int十六进制整数(小写字母,如 1a3f
%X同上十六进制整数(大写字母,如 1A3F
%o同上八进制整数
%efloat, double科学计数法(小写 e,如 3.141593e+00
%E同上科学计数法(大写 E,如 3.141593E+00
%g/%G同上自动选择 %f%e(根据数值大小决定更紧凑的格式)
%%-输出百分号 %

二、修饰符(用于精细控制格式)

1. 宽度与对齐

printf("%10d", 123);   // 输出宽度为10,右对齐:"       123"
printf("%-10d", 123);  // 输出宽度为10,左对齐:"123       "

2. 精度控制

printf("%.2f", 3.14159); // 保留2位小数:3.14
printf("%.5s", "hello world"); // 截取前5个字符:"hello"

3. 填充字符

printf("%05d", 42);    // 用0填充宽度5:"00042"

4. 长度修饰符

修饰符示例描述
h%hd, %hushort int / unsigned short
l%ld, %lulong int / unsigned long
ll%lld, %llulong long int / unsigned long long
L%Lf, %Lelong double

三、scanf() 的格式说明符

scanf() 中必须严格匹配数据类型:

int num;
scanf("%d", &num);  // 输入整数
double value;
scanf("%lf", &value); // 输入双精度浮点数(必须用%lf)

跳过输入

scanf("%d %*s %f", &age, &salary); // 跳过中间的字符串输入

四、代码示例

#include <stdio.h>
int main() {
    int num = 42;
    float pi = 3.14159;
    char str[] = "Hello";
    printf("十进制: %d, 十六进制: 0x%x\n", num, num);
    printf("浮点数: %.2f, 科学计数法: %e\n", pi, pi);
    printf("字符串: %s, 地址: %p\n", str, (void*)&num);
    printf("填充示例: %05d\n", num);
    return 0;
}

输出

十进制: 42, 十六进制: 0x2a
浮点数: 3.14, 科学计数法: 3.141590e+00
字符串: Hello, 地址: 0x7ffd5a3d4a4c
填充示例: 00042

五、注意事项

  • 类型匹配:格式说明符必须与变量类型严格匹配,否则可能导致未定义行为。
    • 错误示例:printf("%d", 3.14); // 错误!应用 %f
  • 指针与地址%p 需要将指针强制转换为 void*
  • 字符串安全scanf("%s", str) 可能导致缓冲区溢出,建议用 %Ns(如 %10s)限制输入长度。

到此这篇关于C/C++ 格式说明符的文章就介绍到这了,更多相关C++ 格式说明符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现四则混合运算计算器

    C++实现四则混合运算计算器

    这篇文章主要为大家详细介绍了C++实现四则混合运算计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++ 常量成员常量返回值详解

    C++ 常量成员常量返回值详解

    这篇文章主要介绍了C++ 常量成员常量返回值详解,需要的朋友可以参考下
    2017-06-06
  • 详解C语言的结构体中成员变量偏移问题

    详解C语言的结构体中成员变量偏移问题

    这篇文章主要介绍了C语言的结构体中成员变量偏移问题,以讲解如何编写宏来对成员变量进行修改为主,需要的朋友可以参考下
    2016-04-04
  • C++中整数类型(Integer Types)的避雷指南与正确使用姿势详解

    C++中整数类型(Integer Types)的避雷指南与正确使用姿势详解

    在实际开发中,如果对C++内建整数类型的机制不熟悉,或者不遵循一定的使用规范,则非常容易引入难以排查和调试的Bug,下面小编就和大家详细讲解一下C++中整数类型的正确使用姿势吧
    2026-02-02
  • 基于QT制作一个简易的传输文件小工具

    基于QT制作一个简易的传输文件小工具

    本文主要介绍了通过QT实现的一个文件传输小工具。功能就是能实现文件的双向传输,即客户端能传给服务端,服务端可以传给客户端。文中示例代码具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • VsCode搭建C语言运行环境详细过程及终端乱码问题解决方案

    VsCode搭建C语言运行环境详细过程及终端乱码问题解决方案

    这篇文章主要介绍了VsCode搭建C语言运行环境以及终端乱码问题解决,在VsCode中搭建C/C++运行环境需要先安装几个插件,具体插件文中给大家详细介绍,需要的朋友可以参考下
    2022-12-12
  • C语言中宏定义的妙用方法

    C语言中宏定义的妙用方法

    今天小编就为大家分享一篇关于C语言中宏定义的妙用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C++ list容器基本逻辑结构和实现原理

    C++ list容器基本逻辑结构和实现原理

    本文详细介绍了C++中list容器的基本用法和实现原理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • c++中string类型和int类型相互转换的几种常用方法

    c++中string类型和int类型相互转换的几种常用方法

    我们在编写程序时,经常涉及到int与string之间的类型转换,本文主要介绍了c++中string类型和int类型相互转换的几种常用方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C语言线性代数算法实现矩阵示例代码

    C语言线性代数算法实现矩阵示例代码

    这篇文章主要为大家介绍了使用C语言线性代数的算法来实现矩阵示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10

最新评论