【问题标题】:Output formated table with fprintf使用 fprintf 输出格式化表格
【发布时间】:2020-05-02 17:23:35
【问题描述】:

有没有简单的方法来格式化该表格?

我正在使用结构读取 txt 文件。但是在屏幕上打印时它没有组织。

fprintf(stdout,"%d.\t'%s'\t%d\t%d\t%d\n",read.serial,read.name,read.roll,read.day1,read.day2);

我想要这样的输出


No.  Name                              ID        #1 #2
1.  Sajjad Kashem                   1330273      0  1 
2.  Hafizul Karim                   1420595      1  1 
3.  Afsana Rahman                   1430458      1  1 
4.  Md. Yousuf Hosain               1510295      0  0 
5.  Md. Farhanuzzaman Reza Famous   1510303      1  0 
6.  Md. Minul Islam Talukdar        1510678      0  1 

【问题讨论】:

  • 请出示您提到的代码的minimal reproducible example。另请解释您的实际问题是什么。显而易见的方法是确定每列的所需宽度,然后相应地填充每个条目。你在那个方法上遇到了什么困难?
  • “当我在屏幕上打印时,它没有更好地组织”是什么意思?不比什么好?期望/希望发生什么?请通过手动模拟来证明这一点。
  • 不使用\t,您可以为字段指定固定宽度,如下所示:%10d,这将在整数前面添加填充,这样总宽度为 10 个字符.也可以动态指定宽度:%*d 在这种情况下,您必须提供一个额外的整数参数来指定所需的宽度
  • @Yunnosch 我编辑了我的帖子你现在可能明白我想要什么了

标签: c formatting printf


【解决方案1】:

您可以使用格式化说明符,例如 %20s 将使用 20 个字符,无论字符串的大小是否较小,这将向右对齐,要向左对齐,您可以使用 %-20s

Live demo

fprintf(stdout,"%-10s%-20s%10s%10s%10s\n\n", "No.", "Name", "ID", "#1", "#2");
fprintf(stdout,"%-10d%-20s%10d%10d%10d\n", 1, "random_name", 123456, 2, 5);
fprintf(stdout,"%-10d%-20s%10d%10d%10d\n", 2, "other_random_name", 1223, 2, 5);
fprintf(stdout,"%-10d%-20s%10d%10d%10d\n", 1, "yet_another_name", 3456980, 2, 5);  

将输出:

No.       Name                        ID        #1        #2

1         random_name             123456         2         5
2         other_random_name         1223         2         5
3         yet_another_name       3456980         2         5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多