格式化输出 - HeavyYuan/A-CD-Record-Management-System GitHub Wiki
Record,Artist,Track Count 间隔5个空格输出
printf("Record%5cArtist%5cTrack Count\n","","");
//预期输出:
Record Artist Track Count
//实际输出:
Record ?Artist ?Track Count
原因: 要输出空格,格式字符c 是输出一个字符,其对应的空格符号是‘ ’,而不是“”,“”是字符串,对应的格式字符是s
所以,修改成以下语句可以得到预期输出:
printf("Record%5sArtist%5sTrack Count\n","","");
//或则
printf("Record%5cArtist%5cTrack Count\n",' ',' ');
保持队形输出
首行输出是 Record Artist Track Count
每一列之间有5个空格,要求后续的内容输出必需保持队形。
实现代码:
//首行输出是
printf("Record%5sArtist%5sTrack Count\n","","");
/*
* 后续输出,只要指定输出宽度,并且设定左对齐,就ok了
* 从上述printf中可以看出,Record和Artist之间间隔5个空格,Artist和Track Count之间间隔5个空格
* 我们只要设定Record列下的内容,宽度是11(Record的宽度+5),Artist列下的内容,宽度也为11,并且左对齐输出,就可以保持首行的队形了。
* 注意:宽度值从当前光标所在位置开始(即不是从行首字符算的)
*/
//综上,有如下实现:
/*
* %s 表示以字符串的形式输出
* %11s 表示输出的字符串宽度是11,默认是右对齐,宽度不够的用空格补充
* %-11s -表示左对齐
*/
printf("%-11s%-11s%d",record1, artist1, 2);
//动态设置宽度
/*
* 星号表示 动态跨度格式,10就是实际宽度
*
*/
printf("%-*s%s\n",10,"what","fuck");