IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】双引号中使用宏定义 -> 正文阅读

[C++知识库]【C语言】双引号中使用宏定义


快速答案

使用星号占位符(*)

printf("%*d", -4, "12"); // 或 printf("%-*d", 4, "12");
// 得到的输出:"12  " (12后面有两个空格)

详细讲解

举个例子

通常,我们为了保证输出格式美观,会使用下面的方式输出

#include <stdio.h>

#define MAX_STR_NUM 3
#define MAX_STR_LEN 7

int main() {
    char s[MAX_STR_NUM][MAX_STR_LEN] = {"Vi", "Jinx", "Yasuo"};
    
    printf("Cham1   Cham2   Cham3\n");
    printf("%-7s %-7s %-7s\n", s[0], s[1], s[2]);
    
    return 0;
}

// 得到的输出:
// Cham1   Cham2   Cham3
// Vi      Jinx    Yasuo

但是,当我们需要使用更长的字符串时,在修改了MAX_STR_LEN之后,还需要手动将printf里,%-7s7分别修改。

这就丧失了代码的一致性 (Consistency)

那么,能不能在双引号里使用宏定义常量,来指定格式化后字符串的长度呢?

方法 及 代码

这里,我们使用C语言的星号(*)占位符

printf("%*s", 3, "ab"); // printf("%*s", 宽度, 变量值);
// 得到的输出:"ab "

printf("%*d", -4, "12"); // 或 printf("%-*d", 4, "12");
// 得到的输出:"12  " (12后面有两个空格)

首先,我们将列的标题也放进字符串数组中,然后和数据一起使用星号占位符格式化输出。

这是改进后的代码

#include <stdio.h>

#define MAX_STR_NUM 3
#define MAX_STR_LEN 7

int main() {
    char s[MAX_STR_NUM][MAX_STR_LEN] = {"Vi", "Jinx", "Yasuo"};
    char headline[MAX_STR_NUM][MAX_STR_LEN] = {"Cham1", "Cham2", "Cham3"};
    
    printf("%-*s %-*s %-*s\n", MAX_STR_LEN, headline[0], MAX_STR_LEN,
           headline[1], MAX_STR_LEN, headline[2]);
    printf("%-*s %-*s %-*s\n", MAX_STR_LEN, s[0], MAX_STR_LEN, s[1],
           MAX_STR_LEN, s[2]);
           
    return 0;
}

// 得到的输出:
// Cham1   Cham2   Cham3
// Vi      Jinx    Yasuo

这时,只用改变MAX_STR_LEN的值,就能得到整齐的输出了。

#define MAX_STR_LEN 7
// 得到的输出:
// Cham1   Cham2   Cham3
// Vi      Jinx    Yasuo

#define MAX_STR_LEN 10
// 得到的输出:
// Cham1      Cham2      Cham3
// Vi         Jinx       Yasuo

参考资料

C语言 宏定义 如何插入到 printf中的双引号里面去?- 百度知道

c语言中的星号(*)占位符

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:59:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:43:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码