我有一个固定大小的数组:
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(属性))*空格之间打印,但没有用。
有人有建议吗?
答案 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),这些空格将永远不会超过。