我琢磨了好久,怎么把printf(“The value of a is %d\n“,a); 中的字符串中的a,做到灵活替换呢?

前言:

我琢磨了好久,怎么把printf("The value of a is %d\n",a);    中的红字a,做到灵活替换呢?

这篇文章就是讨论如何把参数插入到字符串中

一、铺垫

首先我们来做一个小小的铺垫吧

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

我们可以看到,这里的两种打印方法都打印出了同样的效果。

这样就能把a作为一个参数给printf传进去?  嘿嘿,然后我就开始了下面的整活

第一种:用函数来实现传参

1.我想把下面这些printf语句封装成一个函数,这样代码不就简单很多了嘛

int main()
{
    int a = 2;
    printf("The value of a is %d\n", a);

    int b = 5;
    printf("The value of b is %d\n", b);

    float f = 5.2f;
    printf("The value of f is %f\n", f);
    return 0;
}

  

 2.于是我写了下面一段代码,想用红色语句替代蓝色语句

void Printf(int a)
{
    printf("The value of a is %d\n", a);
}
int main()
{
    int a = 2;
    //printf("The value of a is %d\n", a);
    Printf(a);

    int b = 5;
    //printf("The value of a is %d\n", b);
    Printf(b);

    int f = 5.2;
    //printf("The value of a is %d\n", f);
    Printf(f);
    return 0;
}

结果却成了这样。。。不仅仅字母没替换过去,连最后一个float类型的也给我打印成了int型

 

 3.所以我放弃了函数,想着还有什么能够代替函数呢?

突然有一个闯入我的眼中   宏,  对呀,#define定义的宏也可以实现参数的替换

第二种:宏

1.其实宏不仅仅可以定义常量

      酱紫用

       #define M 100

2.还可以定义一段语句,一个类似于函数的东西

eg.             #define MAX(x,y)  ( ((x)>(y)) ? (x) : (y))

3.所以我想到了这么写

#define PRINTF(n)  printf("The value of n is %d\n",n) 

int main()
{
    int a = 10;
    PRINTF(a);
    return 0;
}

好吧还是出了问题,这里的   n  还是  n , 试了这么多种方法,最开始我想实现的把  红字a  做到灵活的替换都还是没有实现

 是不是还差点什么,我又从最开始去找,复查我的步骤

功夫不负有心人,其实我最开始那里的hello world 就是一个很好的开始,只是我走着走着就走偏了

它重新给了我一个灵感,是不是把红字a给写成一个单独的字符串就行了呢?

就是这个样子

printf("The value of " "a" " is %d\n", a);

这样就能把a作为一个参数给printf传进去?

但要想把字母a作为参数传进去,其实还需要引入一个小小的知识点 

回到最初的问题    如何把参数插入到字符串中

其实用一个符号就可以解决的  那就是 

#n   等价于   “n”  ,这样就可以很好的把字符串插入到另一个字符串中啦。

所以我又改了一下上面的代码,红色描出的是改成功的,但是蓝色描出的部分又出了问题

#define PRINTF(n)  printf("The value of "#n" is %d\n",n) 

int main()
{
    int a = 5;
    PRINTF(a);
    int b = 2;
    PRINTF(b);
    float f = 5.2;
    PRINTF(f);
    return 0;
}

 上图就展现出了问题所在,没办法打印浮点数

所以针对  %d  我们还得再做出改变,现在就不仅仅只是对  红字a  的灵活更改了,还得对后面的%d 进行优化

其实也很容易,按照修改  a  的逻辑往上套就行了    %d   改为  “%d”  嘛

但是不能直接把   #%d 往上面直接套,这么多符号堆上去编译器吃得消嘛?

format   格式     就给  %d, %f 等等这些 赋值给变量format就行了   

既然有两个变量,那就只能传两个参数咯

#define PRINTF(n,format)  printf("The value of "#n" is "format"\n",n) 

int main()
{
    int a = 5;
    PRINTF(a, "%d");
    int b = 2;
    PRINTF(b, "%d");
    float f = 5.2;
    PRINTF(f, "%f");
    return 0;
}

哈哈哈哈哈,终于大功告成啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值