变参函数-实现简版的printf(一)

本文档介绍了如何使用C++实现一个简单的printf函数,主要关注%d的格式化打印。通过putchar实现字符串打印,利用变参函数获取并打印变量值。在解析字符串时,遇到%d进行整型数据处理。文章逐步展示了实现过程,包括数据翻转、错误调试及优化,最终实现功能包括:打印字符串、打印整型变量、正确计算打印字符个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击了解变长参数变参函数


为什么说只能实现简版的printf,因为其中涉及到很多优化要做,比如存储,数据结构,输出色彩等等,,该文档仅设计%d部分。也没有做的完善,类似%d02,等都没做,就一个设计思路吧,也是变参函数的应用,关于%c,%f,%s详见文档(二)


总体思路
1、先实现,格式化打印一串字符,利用putchar
2、如何实现打印参数的值,利用变参函数,获取后一个变量
因为变量有不同的类型,所以我们先解析是何种变量
3、记录打印的次数(融合与1、2中)
4、不断试错中优化代码


让我们一起一步一步的来实现吧

功能1:能够打印一个完整的字符串
下面我们基于putchar()来实现我们的my_printf,以printf做对比
过程一代码如下:

#include<stdio.h>

//在const在前,frm内的值为常量,地址允许改变,值不允许改变
int my_printf(const char *frm,...) {
   
       //接收一个字符串
    int cnt = 0;                        //记录打印的字符个数
    for(int i = 0; frm[i]; i++) {
   
        //字符串末尾\0 对应的值为0 即为即假,遍历到末尾自然
        putchar(frm[i]),++cnt;
    }
    return cnt;
}

int main() {
   
   
    printf("hello word\n");
    my_printf("hello word\n");
    return 0;
}

程序的功能实现就是原有的基础上叠加代码,而printf最牛的地方就是能够打印变量的值,这里就要借助变参函数的能力了


功能2:打印变量的值
过程二:思路:首先要对字符串进行解析,遇到%,%d,%c等,代码有限,只解析%d的内容,
->以实现打印整型123为目标
在这里插入图片描述
主函数

int main() {
   
   
    int a = 123;
    printf("hello word\n");
    my_printf("hello word\n");
    printf("int (a) =%d\n",a);
    my_printf("int (a) =%d\n",a);
    return 0;
}

打印结果:
在这里插入图片描述
是不是有点样子了,下面我们进行第三步,因为数据的不确定性,我们要多种试错,带进行调试
过程三:调整与试错
1数据翻转::首先因为数据的位数无法确定,所以我们采用数据从末尾开始打印的方法,也导致数据与原数据的颠倒,所以我们要先将数据翻转再打印
修改:

 case 'd' : {
   
         //因为无法实现整形一起打出,故只能一位一位的以字符形式输出
          int x = va_arg(arg, int);
          int temp = 0;
          while(x){
   
   
              temp = temp*10 + x % 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值