【问题标题】:Displaying a table in C using printf/cprintf?使用 printf/cprintf 在 C 中显示表格?
【发布时间】:2020-11-07 12:02:47
【问题描述】:

我必须使用 printf/cprintf 在 C 中显示一个表格,尤其是这个表格。

数据应由用户提供(号码/姓名/年龄/工资)。

有没有什么聪明的方法来创建这样一个表,而不是使用大量的 printfs/cprintfs? (我什至不知道有什么区别,我在 cplusplus.com 或任何地方都没有找到关于 cprintfs 的语法和用法的任何信息)

谢谢。

【问题讨论】:

  • 你尝试了什么?
  • 我还没有尝试任何东西,因为我真的不想浪费大量时间编写大量函数,因为可能有一种我不知道的更简单的方法。我正在考虑创建一个函数来显示一条普通的行(仅带有破折号),一个用于显示标题的第一行,一个用于第二行,一个用于包含文本的每一行。但我觉得这太过分了,可能有更简单的方法。
  • 你可以尝试在这个问题https://stackoverflow.com/questions/4471714/pretty-print-a-table-in-c中查找或翻译类似答案的库/跨度>
  • printf("%<HERE>d|%<HERE>s|...", id, name, ...) 看看你可以用什么替换<HERE>
  • printf()和微软的cprintf()的区别是第一个去stdout,第二个去控制台,不能重定向。除此之外,它的行为类似于Xprintf() 函数系列。

标签: c


【解决方案1】:

只是一个建议(这是一个例子 - 不是一个完整的功能代码): 确定要打印的不同类型的行 - 例如没有数据的静态行和包含数据的行。从上面的示例中,您只有两条不同的动态线(带有数据的动态线)。其余为静态数据。 创建一堆常量字符串定义,用于格式化字符串 打印。给这些常量起合理的名称,例如 'fullBar' 'header_a' 'header_b' 等。现在您可以在以下命令中使用它们:

printf( full_bar );
printf( header_a );
printf( header_b );
printf( data_row, number, name, age, wage );

等等。 了解格式字符串、printf 和朋友对于成功编写 C 语言至关重要。

【讨论】:

  • 如果您不介意,我如何创建“常量字符串定义”?
【解决方案2】:

cprintf 是 Windows 特定的彩色文本命令

printf 是 posix 方法,但立即写入输出

我建议通过sprintf 构建您的字符串,它将要打印的内容存储到中间字符串,这样,随着您的字符串增长,您的垂直间隔保持格式化。从sprintf(和printf)返回的恰好是写入缓冲区的字符数。

这是一个非常基本的示例,说明如何在顶部创建可变长度条。

#include <stdio.h>

struct person{
    int id;
    char first_name[100];
    char last_name[100];
    int age;
    int salary;
};

int num_char(person * p, char * buf){
    return sprintf(buf,"|%d|%s,%s|%d|%d|",p->id,p->last_name,p->first_name,p->age,p->salary);
}

int print_bar(int n){
    char temp[400];
    char * ptr = temp;
    for (;n--;){
        sprintf(ptr++,"-");
    }
    printf("%s\n",temp);
}

int main(){
    person uut1 = {1,"John","Smith",40,31000};
    char temp[400];
    int res = num_char(&uut1, temp);
    print_bar(res);
    printf("%s",temp);
    printf("\n");
    print_bar(res);
}

你需要做更多的工作来为多人格式化,但我把它留给读者作为练习。

【讨论】:

  • 非常感谢您的时间和想法。
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2016-01-07
  • 2013-02-04
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
相关资源
最近更新 更多