揭秘printf自定义格式符:如何在C语言中实现高效输出控制

别再手动算百分比了!C语言printf的%.0f%%格式符,一行代码搞定蓝桥杯真题 本文揭秘C语言printf函数的格式化技巧,通过%.0f%%格式符一行代码实现百分比输出,解决蓝桥杯等编程竞赛中的常见难题。文章详细解析了浮点数精度控制和百分号转义的核心技巧,并提供了实战应用与边界情况处理建议,大幅提升代码效率与可读性。 阅读详情

第一章:揭秘printf自定义格式符:C语言输出控制的核心机制

在C语言中,printf 函数不仅是最常用的输出工具,更是掌握程序调试与数据展示的关键。其强大之处在于通过格式化字符串精确控制输出内容,而这一切的核心正是格式符的灵活运用。

格式符的基本结构与语义解析

printf 的格式符以百分号 % 开头,后接可选修饰符和类型说明符。标准格式为:
%[flags][width][.precision][length]specifier 例如,%-10.2f 表示左对齐、最小宽度10、保留两位小数的浮点数输出。
  • %d:有符号十进制整数
  • %s:字符串
  • %c:字符
  • %p:指针地址(十六进制)
  • %x:无符号十六进制整数(小写)

动态控制输出精度与宽度

可通过变量动态指定字段宽度和精度:

#include <stdio.h>
int main() {
    int width = 15;
    int precision = 3;
    double value = 3.1415926;

    // 使用*占位符传入宽度和精度
    printf("%*.*f\n", width, precision, value);
    // 输出:       3.142(右对齐,共15字符宽,保留3位小数)
    return 0;
}
上述代码中,两个 * 分别被 width 和 precision 替换,实现运行时动态控制格式。

常见格式修饰符对照表

修饰符含义
-左对齐输出
+强制显示正负号
0用零填充前导空格
l长整型或双精度(如 %ld, %lf)
熟练掌握这些机制,开发者可在日志输出、报表生成等场景中实现高度定制化的文本格式控制。

第二章:理解printf格式化输出的底层原理

2.1 printf函数族的工作流程解析

printf函数族是C标准库中用于格式化输出的核心工具,其工作流程涵盖参数解析、格式化处理与底层I/O调用三个关键阶段。

执行流程概述
  1. 接收格式字符串与可变参数列表
  2. 解析格式说明符(如%s, %d, %f)并匹配对应参数
  3. 将数据转换为字符序列并写入输出流
典型调用示例
int ret = printf("Value: %d, Name: %s\n", 42, "Alice");

上述代码中,printf首先扫描格式字符串,识别出两个占位符;随后按顺序从栈中读取整型42和字符串指针"Alice",将其转化为字符序列并最终通过write()系统调用输出到标准输出文件描述符。

函数族成员对比
函数名输出目标
printf标准输出
sprintf内存缓冲区
snprintf带长度限制的缓冲区

2.2 格式字符串的语法结构与解析规则

格式字符串是构建动态输出的核心工具,广泛应用于日志记录、用户界面展示和数据序列化等场景。其基本结构由固定文本与占位符组成,运行时由解释器按规则替换为实际值。
占位符的基本语法
以 Python 为例,f-string 中的占位符使用 {} 包裹表达式:
name = "Alice"
age = 30
print(f"姓名:{name},年龄:{age}")
上述代码中,{name} 和 {age} 在运行时被变量值替换。支持嵌入表达式,如 {age + 1}。
格式说明符的构成
复杂格式化可通过 {value:format_spec} 实现,其结构为:
  • fill:填充字符
  • align:对齐方式(<, >, ^)
  • width:最小宽度
  • precision:精度(浮点数)
  • type:数据类型码(如 f, d)
例如:{value:>10.2f} 表示右对齐、宽度10、保留两位小数的浮点数。

2.3 可变参数列表(va_list)在格式化中的应用

在C语言中,`va_list` 是处理可变参数函数的关键机制,广泛应用于 `printf`、`sprintf` 等格式化输出函数中。通过标准库 `` 提供的宏,可以安全地访问未知数量和类型的参数。
基本使用流程
使用 `va_list` 需遵循三步:声明、初始化、清理。
  • va_start:初始化参数指针,指向第一个可变参数
  • va_arg:按类型提取下一个参数
  • va_end:释放资源,结束访问

#include <stdarg.h>
#include <stdio.h>

void print_ints(int count, ...) {
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        int val = va_arg(args, int);
        printf("%d ", val);
    }
    va_end(args);
}
上述代码定义了一个打印多个整数的函数。`va_start(args, count)` 将 `args` 指向第一个可变参数;循环中每次调用 `va_arg(args, int)` 获取一个整型值;最后 `va_end` 确保栈状态正确。该机制使函数具备灵活的输入接口,是实现格式化输出的基础支撑。

2.4 标准格式符的类型匹配与内存布局分析

在C语言中,标准格式符如%d、%f、%p等必须与对应变量的类型严格匹配,否则将引发未定义行为。例如,使用%d打印指针会导致数据解释错误。
常见格式符与类型对应关系
  • %d → int
  • %f → double(或float提升)
  • %p → void*,按地址格式输出
  • %zu → size_t
内存布局影响示例
int val = 0x12345678;
printf("%p\n", &val); // 输出:0x7fffabc12340
该整数在小端系统中低字节存储于低地址,格式符%p正确反映其内存起始位置。若误用%x打印地址,可能导致截断或解析错误。

2.5 实践:模拟简易printf实现格式解析

在C语言中,printf函数的核心在于格式化字符串的解析。本节通过实现一个简易版本,深入理解其底层机制。
核心逻辑设计
遍历格式字符串,识别以'%'开头的占位符,并根据后续字符决定输出对应类型的变量值。

int simple_printf(const char* fmt, ...) {
    va_list args;
    va_start(args, fmt);
    for (; *fmt; ++fmt) {
        if (*fmt != '%') {
            putchar(*fmt);  // 普通字符直接输出
        } else {
            switch (*++fmt) {
                case 'd': {
                    int val = va_arg(args, int);
                    print_int(val);  // 自定义整数输出
                    break;
                }
                case 's': {
                    char* str = va_arg(args, char*);
                    while (*str) putchar(*str++);
                    break;
                }
                // 可扩展其他类型
            }
        }
    }
    va_end(args);
    return 0;
}
上述代码使用va_list访问可变参数,通过指针遍历逐字符匹配格式符。遇到%d调用整数打印,%s则输出字符串。
格式符映射表
格式符对应类型处理方式
%dint十进制输出
%schar*逐字符输出
%%-输出百分号

第三章:扩展printf功能的技术路径

3.1 使用__attribute__((format))进行安全性检查

C语言中格式化字符串函数(如`printf`、`sprintf`)若使用不当,容易引发安全漏洞。GCC提供的`__attribute__((format))`机制可在编译期检查格式字符串与参数的匹配性,提前发现潜在问题。
语法结构与应用
该属性用于自定义函数,声明方式如下:

extern int my_printf(void *obj, const char *format, ...)
    __attribute__((format(printf, 2, 3)));
其中,printf表示参照`printf`的检查规则,2是格式字符串在参数中的位置,3是可变参数起始位置。
实际效果对比
启用后,以下代码将触发编译警告:

my_printf(obj, "%s", 123); // 类型不匹配
编译器会提示:format specifies type 'char *' but argument is 'int'。
  • 有效防止格式化字符串漏洞
  • 提升代码健壮性与安全性
  • 适用于自定义日志输出函数

3.2 glibc中register_printf_function的接口探秘

在glibc中,`register_printf_function` 是扩展 `printf` 系列函数功能的关键接口,允许开发者注册自定义格式说明符。该机制为格式化输出提供了高度灵活性。
接口原型与参数解析

int register_printf_function (int spec, printf_function handler, printf_arginfo_function arginfo);
其中,spec 为格式字符(如 'X'),handler 处理输出逻辑,arginfo 提供参数个数与类型信息。三者协同实现对 `%X` 类似格式的自定义支持。
注册流程与执行机制
  • 调用 register_printf_function 将自定义处理函数注入内部跳转表
  • 当 printf 遇到对应格式符时,查表调用注册的 handler
  • handler 可访问变参列表,按需格式化并写入输出流
此机制广泛用于嵌入式调试、协议报文生成等场景,提升日志表达力。

3.3 实践:注册自定义%z格式符输出二进制表示

在Go语言中,通过扩展fmt包的功能,可注册自定义格式符%z用于输出整数的二进制表示。
实现步骤
  • 定义实现fmt.Formatter接口的类型
  • 在Format方法中识别'z'动词
  • 使用fmt.Fprintf输出二进制形式
type Binary int

func (b Binary) Format(s fmt.State, verb rune) {
    if verb == 'z' {
        fmt.Fprintf(s, "%b", int(b))
    }
}
上述代码中,当格式字符串使用%z时,如fmt.Printf("%z", Binary(10)),将输出1010。参数s fmt.State提供写入接口,verb接收格式动词字符,通过条件判断实现自定义格式化逻辑。

第四章:构建高效自定义格式输出系统

4.1 设计专用格式符处理用户自定义数据类型

在Go语言中,通过实现fmt.Formatter接口可深度定制类型的格式化行为。该接口允许开发者根据需求解析格式动词并输出对应表示。
实现Formatter接口
type Person struct {
    Name string
    Age  int
}

func (p Person) Format(f fmt.State, c rune) {
    switch c {
    case 'v':
        if f.Flag('+') {
            fmt.Fprintf(f, "%s (%d years old)", p.Name, p.Age)
        } else {
            fmt.Fprintf(f, "%s", p.Name)
        }
    case 's':
        fmt.Fprintf(f, "Name: %s, Age: %d", p.Name, p.Age)
    }
}
上述代码中,Format方法接收fmt.State用于写入输出,rune表示格式动词。通过f.Flag('+')判断是否使用了+v等扩展格式。
支持的格式控制
  • %v:默认输出姓名
  • %+v:输出姓名与年龄详情
  • %s:字符串化完整信息

4.2 实现高性能浮点数科学记法格式化输出

在科学计算与大数据处理中,浮点数的科学记法输出需兼顾精度与性能。传统格式化方法如 printf 系列函数存在运行时解析开销,难以满足高频调用需求。
优化策略
采用预计算指数与尾数分离技术,减少重复运算:
  • 通过位操作提取 IEEE 754 浮点数的符号、指数和尾数
  • 使用查表法加速 10 的幂次转换
  • 避免动态内存分配,实现栈上格式化
char* fast_scientific(double val, char* buf) {
    int exp;
    double mantissa = frexp(val, &exp);
    mantissa = ldexp(mantissa, 53); // 提取52位尾数
    exp -= 53;
    int pow10 = (int)(exp * 0.30103); // log10(2) ≈ 0.30103
    // 查表获取10^pow10的倒数并调整尾数
    sprintf(buf, "%.*fe%d", 6, mantissa * inv_pow10[pow10], pow10);
    return buf;
}
该函数通过数学变换将二进制指数快速映射为十进制阶码,结合静态幂次表,显著提升格式化吞吐量。

4.3 集成颜色编码与终端样式控制的扩展格式符

在现代命令行工具开发中,提升输出可读性至关重要。通过扩展格式符集成颜色编码和终端样式控制,能够显著增强用户交互体验。
ANSI 转义序列基础
终端样式依赖 ANSI 转义码实现,例如 \033[31m 将文本设为红色,\033[1m 启用加粗,\033[0m 重置样式。
格式化代码示例
package main

import "fmt"

const (
    red    = "\033[31m"
    bold   = "\033[1m"
    reset  = "\033[0m"
)

func main() {
    fmt.Printf("%s%sError:%s Unable to connect.\n", bold, red, reset)
}
上述代码使用 Go 语言打印加粗红色错误信息。其中 red 设置颜色,bold 增强视觉权重,reset 防止样式污染后续输出。
常用样式对照表
代码效果
30-37前景色(标准色)
1加粗
0重置所有样式

4.4 实践:为嵌入式系统定制轻量级printf扩展

在资源受限的嵌入式环境中,标准库的 `printf` 往往因体积和依赖问题难以使用。构建一个可裁剪、模块化的轻量级 `printf` 扩展成为必要选择。
核心功能裁剪
仅保留常用格式符(如 `%d`, `%x`, `%s`, `%c`),移除浮点支持以节省空间。通过宏开关控制功能启用:

#define PRINTF_SUPPORT_FLOAT 0
#define PRINTF_SUPPORT_STRING 1
该配置可在编译期决定是否包含字符串处理逻辑,减少最终二进制体积。
输出接口抽象
将底层输出函数解耦,便于适配UART、LCD等不同设备:

static void out_char(char c) {
    uart_write(&c, 1); // 示例:写入串口
}
此回调机制提升可移植性,只需替换 `out_char` 实现即可适配新平台。
性能对比
实现方式代码大小 (KB)执行效率 (ms)
标准 printf8.21.8
轻量版 printf1.50.9

第五章:自定义格式符在现代C编程中的演进与局限

格式化输出的扩展需求
随着嵌入式系统与日志框架的发展,开发者对 printf 系列函数的扩展需求日益增长。通过 register_printf_function(GNU 扩展),可注册自定义格式符,例如实现二进制输出:

#include <printf.h>
int print_binary(FILE *stream, const struct printf_info *info, 
                 const void *const *args) {
    unsigned int value = *(unsigned int *)args[0];
    for (int i = 31; i >= 0; i--) {
        fputc((value & (1U << i)) ? '1' : '0', stream);
    }
    return 32;
}
// 注册 %b 为二进制输出
register_printf_specifier('b', print_binary, NULL);
跨平台兼容性挑战
该机制仅在 glibc 中支持,Clang 和 MSVC 编译器无法识别,导致移植困难。实际项目中常采用宏封装规避:
  • #define PRINTF_BINARY(fmt) (sizeof(fmt) == 2 && fmt[1] == 'b' ? custom_vprintf(fmt, args) : vfprintf(stdout, fmt, args))
  • 使用静态断言检测编译器特性
  • 在构建系统中通过 CMake 判断是否启用扩展
安全与性能权衡
自定义格式符可能绕过编译器对格式字符串的检查,增加格式化字符串漏洞风险。以下表格对比主流方案:
方法安全性可移植性适用场景
glibc 扩展低差Linux 专用工具
宏封装 + snprintf高优跨平台日志库
流程:用户调用 printf("%b", x) → 检测编译器是否支持 register_printf_function → 若不支持,重定向至自定义解析函数 → 拆解参数并逐字符输出
C语言printf()函数详解 printf()函数是C语言标准输入输出库(stdio.h)中的一个重要函数,用于向标准输出(通常是终端或屏幕)格式化输出数据。它能够处理各种类型的数据,包括整数、浮点数、字符、字符串等,并允许通过格式化字符串来控制输出的格式。 阅读详情

相关推荐

基于Unidbg的小红书加密协议动态分析与算法还原实战

在移动应用安全领域,加密协议与签名机制是保障数据传输安全、实现客户端身份验证的核心技术。其原理通常涉及哈希算法、对称/非对称加密以及自定义的混淆逻辑,旨在防止请求被篡改或重放。理解这些协议对于安全研究、风控策略制定及合规的数据交互分析具有重要价值。在实际的工程实践中,面对高度混淆和加固的Native代码(SO库),传统的静态分析往往难以深入。此时,沙盒模拟执行技术提供了一种动态、可控的分析方案。通过搭建一个虚拟的移动应用运行环境,研究人员可以在无需真机、规避反调试机制的情况下,完整地追踪和观察加密算法的执行

weixin_29315091的博客 326

printf_输出宽度控制_输出位数控制

printf、输出控制、输出宽度、输出位数

zhg2546179328的博客 6033

告别VBA!用Python+PyWin32自动化你的SolidWorks建模流程(附完整代码)

本文详细介绍了如何利用Python和PyWin32实现SolidWorks建模流程的自动化,替代传统的VBA宏开发。通过环境配置、宏代码转换、高级开发模式及工程化实践等实战内容,帮助机械设计师构建高效、可维护的自动化工作流,显著提升设计效率。

weixin_30485379的博客 366

【C语言】printf的输出格式控制符、格式修饰符、转义字符

格式控制符: %d:用于输出十进制有符号整数。 %u:用于输出十进制无符号整数。 %f:用于输出十进制浮点数字。 %e或%E:用于输出指数形式的浮点数。 %g或%G:用于输出浮点数,根据数值大小自动选择使用%f或%e。 %x或%X:用于输出十六进制。 %c:用于输出单个字符。 %s:用于输出字符串。 %p:用于输出指针地址。 %lu:用于输出无符号长整型。 %lld或%I64d:用于输出有符号长长整型。 %llu或%I64u:用于输出无符号长长整型。 %Lf:用于输出长双精度浮点数

crr411422的博客 1万+

CUDA编译踩坑实录:如何正确设置-gencode参数适配你的GPU算力

本文深入解析CUDA编译中-gencode参数的核心原理与实战配置,帮助开发者解决常见的'Unsupported gpu architecture'错误。通过厘清虚拟架构与真实架构的区别,并提供多版本兼容的CMake配置方案,确保编译出的代码能精准适配不同GPU算力,兼顾性能与广泛兼容性。

weixin_28829903的博客 338

Cadence学习之路:什么是PCB工艺的正片与负片

正片??负片??Flash焊盘的创建与使用

qq_46757048的博客 4245

printf常用输出控制符

%d 输出整数 %ld 输出长整数 %c 输出字符

m0_52217130的博客 536

保姆级教程:用dnSpy调试Unity游戏,从找DLL到打断点全流程(附调试版mono.dll下载)

本文详细介绍了使用dnSpy调试Unity游戏的全流程,包括环境准备、关键程序集定位、mono.dll版本匹配与替换、调试环境配置及实战技巧。通过本教程,开发者可以高效进行Unity游戏逆向分析,适用于学习设计模式或安全审计等场景。

weixin_30236595的博客 577

Linux命令_printf & 格式化输出信息

printf制作表格,实时输出任务百分比

m0_61066945的博客 7089

贝叶斯时空模型-INLA-4

该文章中,会简化数学计算的过程,主要是针对,在有数据的基础上,如何应用贝叶斯时空模型,找出影响因素,绘制时间变化的空间分布预测图。上述中关键一步与前几期介绍的不一样的地方是,我们加入了n.group参数,用来指定年份,先看一下Year有多少年的,然后封装在s.index里面。在前述的内容中,我们介绍了,如何处理空间的数据,利用海拔高度预测降雨量的例子。建立好数据及mesh以后,我们现在写INLA公式,如果不考虑残差项,那就是固定效应,现在我们增加残差项,及空间与时间效应。这里的Mesh设定值为10,20。

学习中 2948

论文必备 - YOLO26统计数据集中大、中、小目标数量,附完整代码和详细使用步骤

数据集是由微软开发维护的大型图像数据集。数据集标注类型对应任务包括物体检测、关键点检测、实例分割、stuff分割(没有特定形状的物体),全景分割人体关键点, 人体密度检测等。官网数据规模和样本特点数据规模大:总共包含32.8万张图像)。其中标注过的图像超过 20 万张,拥有 150 万个目标实例,数据量丰富,能够为模型训练提供充足的信息。类别丰富:包含80个目标类别和91个“stuff”类别。目标类别涵盖了日常生活中常见的各种物体,如人、动物、交通工具、生活用品等;stuff。

Limiiiing的博客 265

【C语言高级技巧揭秘】:手把手教你实现自定义printf格式符(99%程序员不知道的核心机制)

掌握C语言printf自定义格式符实现技巧,轻松扩展格式化输出功能。适用于嵌入式开发、日志系统等场景,通过注册自定义格式符提升调试效率。详解_g_fmt函数机制与实际代码示例,深入底层原理,值得收藏。

CodePulse的博客 933

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

C语言杨辉三角:从二维数组到组合数公式的三种高效解法

在C语言编程中,数组是基础且核心的数据结构,用于存储和操作同类型数据集合。其原理在于通过连续内存空间和索引机制实现高效访问。掌握数组的灵活运用,对提升代码性能和解决复杂问题至关重要,尤其在算法优化和内存管理场景下。杨辉三角作为经典例题,完美串联了数组应用、递推算法和数学建模。本文聚焦**内存管理**和**算法优化**,通过对比二维数组直观法、一维数组滚动法及组合数公式法,深入剖析不同场景下的空间与效率权衡,为C语言学习者和面试者提供扎实的编程思维训练。

weixin_33785108的博客 400

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言要点细细梳理(上)

在编程领域,“宏”就是指通过预设,对指定的文本内容进行替换c语言中,通过#define预编译指令定义一个宏如下宏定义代码,在预编译阶段(即编译前),把源码中所有的PI改成对应的数字#define PI宏定义不止可以定义常量,也可以带参数定义:需要注意宏定义是简单机械的替换,注意下面这个例子,为了避免这样的问题,可以在宏定义时对计算的值加上括号宏定义是预编译指令,本质是文本的替换,支持复杂的带参数的文本模式替换不变量是语句,本质是对变量的修饰,限定其不能通过赋值号赋值。

honev.blog.youkuaiyun.com 1032

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言格式化输出函数printf详解——C语言基础知识

1、printf函数的一般格式 printf函数的一般格式为: printf(格式控制字符串,输出值参数表); 如: printf("f=%f,c=%f\n",f,c); 其中,f=%f,c=%f\n 是格式控制字符串,f,c 是输出值参数表。 (1)格式控制字符串是用双引号括起来的字符串,包括三类信息: 格式字符。格式字符由“%”引导,如%d、%f等。它的作用是控制输出字符的格式。 转义字符。格式控制字符串里的转义字符按照转义后的含义输出,如上面printf函数双引号内的换行符“\n”,即输出回车。

weixin_54194783的博客 9万+

【C】printf()使用占位符精细控制输出格式

printf()函数提供丰富的占位符参数以便精细地控制输出格式。这些精细的控制在日常编程中用得不多,毕竟大部分的应用程序都是基于图形界面,而不是终端的。考虑到部分OJ系统中的在线编程题可能对输出格式作了精细要求,这里对printf()函数的格式化输出控制进行“详细”讨论。.........

海洋饼干叔叔 1539

printf格式控制符的完整格式

printf格式控制符的完整格式printf的格式控制的完整格式:%   -   0   m.n   l或h   格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型

nicholasmaxwell的专栏 6457

控制“printf”输出总结

类型: %d:以十进制形式输出带符号整数(正数不带正号)。 %o:以八进制形式输出无符号整数(不输出前缀0)。 %x or %X:以十六进制形式输出无符号整数(不输出前缀0x)。 %u:以十进制形式输出无符号整数。 %f:以小数形式输出单,双精度实数。 %e or %E:以指数形式输出单,双精度实数。 %g or %G:以%f或%e中较短宽度输出单,双精度实数。 %c:输出单个字符。 %s:输出字符串。 符号: “-”:结果左对齐,右边填空格。 “+”:输出符号(正号或者符号)。 “空格”:输出值

qq_54804745的博客 913

printf的输出规则

今天看到了一个很有趣的程序: 判断下面程序输出的内容: #include #include int main()  {      int i=43;        printf("%d\n",printf("%d",printf("%d",i)));       system("pause");       return 0;  }  

开始淡漠的博客 2218

C printf输出格式控制

原文地址:http://c.biancheng.net/view/159.html 输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数,也是学习C语言必学的两个函数。在C语言程序中,几乎没有一个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。 如果在程序中要使用 printf 或者 scanf,那么就必须要包含头文件 stdio.h。因为这两...

dragon_cdut的博客 3896

printf()函数格式控制详解

Printf()介绍 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型: int printf ( const char * format, ... ); 返回值: 正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将...

weixin_30603633的博客 1229

使用printf()函数输出数据时,占位符的快速入门。(初学者)

很多初学者,在学习C语言的时候,最经常使用的就是printf()函数,将程序结果输出到屏幕上,但使用的时候总会出现这样会那样的情况。 1.使用printf()函数时,千万不要忘记包含标准输入、输出函数的头文件。#include 2.常用的基本数据类型分为四类:char、int、float、double。 3.对应以上的数据类型对应的占位符为:%c、%d、%f、%lf。 eg: int

yangsongyan的专栏 2737

Printf的格式控制和使用技巧

printf tricks   前言:发现一个小小的printf既然有这么多的功能我不知道,强大的“二八法则”,再次证实了它的威力。 转自http://www.georgevreilly.com/blog/2005/06/02/PrintfTricks.aspx Printf  tricks It may be old-fashioned, but I still find p

Sagittarius_Warrior的博客 2139

printf() 输出控制符

xupeng1644的博客 1940

关于printf输出控制格式

#include&lt;stdio.h&gt;#include&lt;string.h&gt;int main(void){    char c,s[20],*p;    int a=1234,*i;    float f=3.141592653589;    double x=0.12345678987654321;    p="Howdoyoudo";    strcpy(s,"Hello,C...

她的吻让他 1258
上一篇: 大端小端字节序转换实战精讲,掌握这些C语言技巧让你少走5年弯路
下一篇: C语言全局变量初始化顺序:为什么你的变量总是“未初始化”?
FastSolve
博客等级 码龄1年 155粉丝 2011原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值