首页 > 其他分享 >【C语言】双引号中使用宏定义

【C语言】双引号中使用宏定义

时间:2023-08-02 09:12:04浏览次数:47  
标签:%- 12 定义 双引号 MAX LEN C语言 STR printf

 

目录

 


快速答案

使用星号占位符(*)

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语言中的星号(*)占位符

 

标签:%-,12,定义,双引号,MAX,LEN,C语言,STR,printf
From: https://www.cnblogs.com/peifx/p/17599661.html

相关文章

  • vue--day50--todolist案例自定义事件修改footer 和header 修改
    1.MyHeader.vue<template><divclass="todo-header"><!--v-model:="title"是实时绑定的--><inputtype="text"placeholder="请输入你的任务名称,回车键确认"v-model="title"@keyup.enter="add"/>......
  • 若依--自定义loadUserByUsername参数入参
    若依--自定义loadUserByUsername参数入参前言在使用若依的Security的登录认证时,默认只能使用用户名去查询sysUser,当我需要额外的参数去查询用户数据时,只能将用户名和额外参数组成json或者特定字符拼接,然后在UserDetailsServiceImpl的loadUserByUsername方法自定义查询数据。但是......
  • C语言 typedef 定义 struct 变量
    typedefstructnode{ datatypedata; structnode*next;}linknode,*linklist;创建单链表linklistL;//等价于structnode*L可以理解为,通过typedef,将structnode*替换为linklist当我们在使用LinkListL定义变量时,实际上就是在使用structnode*L定义变量使得以后......
  • 基于Qt编写超精美自定义控件
    一、前言无论是哪一门开发框架,如果涉及到UI这块,肯定需要用到自定义控件,越复杂功能越多的项目,自定义控件的数量就越多,最开始的时候可能每个自定义控件都针对特定的应用场景,甚至里面带了特定的场景的一些设置和处理,随着项目数量的增多,有些控件又专门提取出来共性,做成了通用的自定义控......
  • Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页
    除了社交媒体,浏览器可能是我们日常工作、学习和生活中最常用的平台之一。然而,在使用浏览器的过程中,我们经常被书签管理、标签管理等问题所困扰。例如,书签栏混乱不堪,无法快速查找到所需书签。为了和浏览器OS 高效互动,我们需要一个简单、好用、好看的工具,帮助我们提升使用浏览器的......
  • 2023.8.1 周二:自定义异常
    1//MyException2//继承Exception的类,即为自定义的异常类3publicclassMyExceptionextendsException{4//传递数字>10,则报异常5privateintdetail;6//Alt+Insert自动添加构造方法7publicMyException(inta){8this.detail=......
  • c语言学习10
    结构:结构是由程序员自己设计的一种数据类型,用于描述一种事物的各项数据,由若干个不同的基础类型组成设计:struct结构体类型名{类型名成员名;...};定义:struct结构体类型名结构体变量名;注意:C语言中在定义结构变量时,struct关键字不能省略初始化:......
  • 自定义组件
    微信小程序组件模板和样式组件模板和样式类似于页面,自定义组件拥有自己的 wxml 模板和 wxss 样式。 组件模板 组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。在组件模板中可以提供一个 <slot> 节点,用于承载组......
  • 初学C语言day07--指针与堆内存
    什么是指针:指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整形数据,该整型数据代表了内存的编号(地址),可以通过这个编号访问对应的内存为什么要使用指针:1、函数之间是相互独立的,但是有时候需要共享变量传参是单向值传递全局变量可以共享,但是容易命名冲突......
  • java 自定义读取properties配置文件属性
    把属性存到一个map里,并提供get方法,如果没有获取到值,则重新加载一遍配置文件,重新赋值,从而刷新数packagecom.aaa.demo.testProperties;importjava.io.IOException;importjava.io.InputStream;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;......