在 C 中对齐 printf() 变量和小数

2023-12-07

今天C的大问题。所以我希望我的变量在列中对齐并且同时保留两位小数。

我知道要达到小数点后两位,我需要使用 %.2f,如果我想要宽度,我使用 %-30s。但我无法将它们结合起来。看看我下面的代码你就会明白了。

printf("ItemA                  %.2f @ $3.34                    $ %.2f\n", huhu, totalhuhu);
printf("ItemB                 %.2f @ $44.50                    $ %.2f\n", haha, totalhaha);

huhu、totalhuhu、haha、totalhaha 都是浮点数。我希望项目下的项目、价格下的价格对齐以及总计下的总计对齐,无论一个总计的位数是否比另一个总计的位数多。

谢谢人们。


就我个人而言,我会避免在输出中使用制表符。如果您小心的话,您可以使对齐工作正常进行 - 主要是为每个项目使用相同的格式字符串。 (您对变量名称的选择使得完全自动化变得更加困难;结构数组有一些优点。)

如果您想要货币敏感的格式,请查看strfmon()函数,并记住 C 程序在 C 语言环境中运行,直到您使用以下命令设置不同的语言环境setlocale().

示例代码:

#include <stdio.h>
#include <locale.h>
#include <monetary.h>

int main(void)
{
    double huhu = 123.45;
    double haha = 234.56;
    double huhu_price = 3.34;
    double haha_price = 44.50;
    double totalhuhu = huhu * huhu_price;
    double totalhaha = haha * haha_price;
    char *huhu_name = "Item A";
    char *haha_name = "Much Longer Name";

    setlocale(LC_ALL, "");

    const char fmt[] = "%-30s %10.2f @ $%6.2f $%20.2f\n";
    printf(fmt, huhu_name, huhu, huhu_price, totalhuhu);
    printf(fmt, haha_name, haha, haha_price, totalhaha);

    char buffer1[32];
    char buffer2[32];
    const char p_fmt[] = "%-30s %10.2f @ %s %s\n";
    const char price[] = "%(7.2n";
    const char cost[]  = "%(21.2n";
    strfmon(buffer1, sizeof(buffer1), price, huhu_price);
    strfmon(buffer2, sizeof(buffer2), cost, totalhuhu);
    printf(p_fmt, huhu_name, huhu, buffer1, buffer2);
    strfmon(buffer1, sizeof(buffer1), price, haha_price);
    strfmon(buffer2, sizeof(buffer2), cost, totalhaha);
    printf(p_fmt, haha_name, haha, buffer1, buffer2);

    return 0;
}

示例输出:

Item A                             123.45 @ $  3.34 $              412.32
Much Longer Name                   234.56 @ $ 44.50 $            10437.92
Item A                             123.45 @   $3.34               $412.32
Much Longer Name                   234.56 @  $44.50            $10,437.92
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C 中对齐 printf() 变量和小数 的相关文章

随机推荐

  • 矩阵转置 Common Lisp

    好吧 我被告知要在 common lisp 中创建一个矩阵转置函数 我是个初学者 所以不太了解 我的矩阵是列表的列表 我不能使用 apply mapcar 或类似的方法来解决它 只能使用 CONS CAR 和 CDR 如果没有 我的解决方案
  • jquery 动画可以以编程方式链接吗?

    我有这个代码 jQuery flash animate opacity 0 35 200 animate opacity 0 200 animate opacity 0 35 200 animate opacity 0 200 animat
  • 在 XGBoost.XGBRegressor 中创建自定义目标函数

    因此 我对 Python 中的 ML AI 游戏相对较新 目前正在研究围绕 XGBoost 自定义目标函数实现的问题 我的微分方程知识相当生疏 所以我创建了一个带有梯度和 hessian 的自定义 obj 函数 该函数对均方误差函数进行建模
  • Play 2.2.1 Java:相当于 play 1.X 中的 @before 过滤器吗?

    我想实施一个设置用户是否存在 当你could使用过滤器 或拦截器 在 传统 webapp框架方式中 Play首选方式似乎肯定是编写自定义Action方法 请参阅有关的文档动作组合 如果你遵循他们的风格 你就会定义一个新的Action像这样的
  • 链接到 Docker memcached 容器

    我已经尝试 Docker 几天了 并且越来越喜欢它 然而 有一些事情仍然让我困惑 这是我到目前为止所拥有的 创建占用空间少的 Ubuntu 14 04 映像 I got this from a post on this forum bin
  • 对于使用 packages.config 的项目,是否有 contentFiles 的替代方案?

    我有一个 nuget 包 当用户安装我的包时 我希望将其内容复制到构建输出 有对此的支持 NuGet ContentFiles 揭秘在 NuGet v3 3 中 但是 它仅适用于使用project json 当我有一个使用的项目时 内容文件
  • React Native中获取ScrollView的当前滚动位置

    是否可以获取当前滚动位置或当前页面
  • C++11 lambda 实现和内存模型

    我想要一些有关如何正确思考 C 11 闭包和std function就它们如何实现以及如何处理内存而言 尽管我不相信过早优化 但我确实有在编写新代码时仔细考虑我的选择对性能影响的习惯 我还进行了大量的实时编程 例如在微控制器和音频系统上 需
  • android 三角形drawablw xml

    我想画一个等边三角形 我检查过 但它是倒置的 我想要一个如下图所示的三角形 Triangle 三角形 xml
  • Java 扫描器未扫描整个文件

    我正在用 Java 编写一个程序 我需要做的一件事是为最短路径问题创建一组每个有效位置 这些位置在 txt 文件中定义 该文件遵循严格的模式 每行一个条目 没有额外的空格 非常适合使用 nextLine 获取数据 我的问题是 文件中的 24
  • Facebook SDK 3.1 PresentShareDialogModally 失败

    我正在尝试在 iOS 6 上测试 Facebook 的新内置共享 表 但是当我运行示例代码时 它没有显示该表 相反 它会为我发布一个状态 但不会显示它将首先发布的内容 我还以为 Facebook 不再允许你把话放到用户的嘴里了 控制台打印此
  • html 空间显示为 %2520 而不是 %20

    将文件名传递给 Firefox 浏览器会导致其将空格替换为 2520代替 20 我在名为的文件中有以下 HTMLmyhtml html img src 当我加载时myhtml html在 Firefox 中 图像显示为损坏的图像 所以我右键
  • 如何提高 g.drawImage() 方法调整图像大小的性能

    我有一个应用程序 用户可以在相册中上传图片 但上传的图像自然需要调整大小 以便还有拇指可用 并且显示的图片也适合页面 例如800x600 我调整大小的方式是这样的 Image scaledImage img getScaledInstanc
  • 如何在 python 中同时检测多个按键?

    我想对角移动我的机器人汽车 因此为了实现这一点 我想检测 w 是否与 d 或 a 一起按下 如果我想使用 w a s d 作为我的键 我现在有的是这样的 from curtsies import Input with Input keyna
  • 不同签名功能的容器

    我正在尝试用 C 编写一个框架 用户可以在其程序中指示他想要应用的一组函数记忆化战略 假设我们的程序中有 5 个函数f1 f5我们希望避免对函数进行 昂贵的 重新计算f1 and f3如果我们已经使用相同的输入调用它们 请注意 每个函数可以
  • 如何动态加载 gwt 生成的 nocache.js 文件?

    我想加载生成的 GWTfoo foo nocache js使用 JQuery 动态文件 不知何故这个foo foo nocache js文件不被浏览器执行 如果我通常使用 GWT 样式而不使用 JQuery 放置脚本 那么在加载页面后 它会
  • 标准布尔运算顺序

    我正在用 JavaScript 编写一个用于布尔逻辑的调车场算法 但我遇到了操作顺序的问题 我允许的操作是 and or implies equals biconditional not xor nor nand 但是 我不知道这些的优先顺
  • BasicNetwork.performRequest - 意外响应代码 400 (POST)

    当我尝试使用 Volley StringRequest 或 JsonObjectRequest 通过 REST API 获取数据时 我总是收到 400 错误 它与邮递员一起工作正常 Http请求方法为POST Content Type为ap
  • 在 GZIPInputStream 中包装 BodySubscriber 会导致挂起

    我正在使用新的java net http类来处理异步 HTTP 请求 响应交换 我正在尝试找到一种方法让 BodySubscriber 处理不同的编码类型 例如 gzip 然而 映射一个BodySubsriber
  • 在 C 中对齐 printf() 变量和小数

    今天C的大问题 所以我希望我的变量在列中对齐并且同时保留两位小数 我知道要达到小数点后两位 我需要使用 2f 如果我想要宽度 我使用 30s 但我无法将它们结合起来 看看我下面的代码你就会明白了 printf ItemA 2f 3 34 2