如何以表格格式将字符串列表打印到文件中?

时间:2016-01-15 15:14:54

标签: c formatting

我有一个固定大小的数组:     library[BOOKNUM]

数组中的每个项目都是struct book

结构书

typedef struct _book{

    char name[NAME_LENGTH];
    char authors[AUTHORS_NAME_LENGTH];
    char publisher[PUBLISHER_NAME_LENGTH];
    char genre[GENRE_LENGTH];
    int year;
    int num_pages;
    int copies;
}book;

我的目标是打印这样的文件列表:

Name                    Author                Publisher                     Genre ...
War and Remembrance     Herman Wouk           Good Books Publishing, LtD    Historic Novel 
Zzz, from A to Z        Noam Chomsky          Bad Books Publishing, LtD     Linguistics
Splitting the Atom      Margaret Openheimer   Science Books Publishing, inc Nuclear Physics

等所有书籍和所有属性。

我尝试在属性之间放置\t,但没有用。

我尝试在每个属性(30-len(属性))*空格之间打印,但没有用。

有人有建议吗?

3 个答案:

答案 0 :(得分:1)

printf( "%-30s", str );打印str并在末尾用空格填充字符串,最多为30个字符。 printf( "%-*s", len, str );打印str并在结尾填充空白字符串,最多为len个字符。

这是一个打印struct book字符串的函数。每列都有固定的长度:

print_book( book *b )
{
    printf( "%-*s", NAME_LENGTH, book->name);
    printf( "%-*s", AUTHORS_NAME_LENGTH, book->authors);
    printf( "%-*s", PUBLISHER_NAME_LENGTH, book->publisher);
    printf( "%-*s", GENRE_LENGTH, book->genre);
}

类似功能打印到文件:

fprint_book( FILE *f, book *b )
{
    fprintf( f, "%-*s", NAME_LENGTH, book->name);
    fprintf( f, "%-*s", AUTHORS_NAME_LENGTH, book->authors);
    fprintf( f, "%-*s", PUBLISHER_NAME_LENGTH, book->publisher);
    fprintf( f, "%-*s", GENRE_LENGTH, book->genre);
}

答案 1 :(得分:0)

如果您知道每列的最大长度(看起来如此),您只需检查要打印的值的长度(例如,如果printf()是25个字符,并且最大长度为列是30),您可以用空格填充剩余的5个未使用的字符,因此您不必担心缩进。

但是,printf("%-15s\n", "Hello, world!"); 有非常有用的方法来定义最大宽度。 例如,

{{1}}

语句打印字符串,但打印15个字符。如果字符串较小,则“空”位置将填充“空格”。

查看here以获取一些有用的示例。

答案 2 :(得分:0)

您可以格式化字符串以指定使用printf时的长度。

例如:

//prints out a c string that takes up 20 spaces
printf("%20s", str);            

// printing multiple c strings
printf("%20s%25s", str1, str2); 

确保为字符串指定一些空格(在第一种情况下为20),这些空格将永远不会超过。