printf("| processid\t+ threadid\t| refilling\t| drinking\t| thinking\t|
waiting\t| terminated\t| p_type\t| required\t| consumed\t|
wake_count\t| turnaround_time\t\t+\n");
for (int i = 0; i < size; i++)
{
printf("|%d\t\t| %d\t\t| %d\t\t\t| %d\t\t\t| \
%d\t\t\t| %d\t\t\t| %d\t\t\t\t|%s\t\t| \
%d\t\t\t| %d\t\t| %d\t\t| %d\t\t|\n",
pcb[i].processid, pcb[i].threadid,
(pcb[i].t_state == 1)?1:0,
(pcb[i].t_state == 2)?1:0,
(pcb[i].t_state == 3)?1:0,
(pcb[i].t_state == 4)?1:0,
(pcb[i].t_state == 5)?1:0,
(pcb[i].p_type == Student)?"Student": "Bartender",
pcb[i].light_beer_required,
pcb[i].light_beer_consumed,
pcb[i].wake_count,
pcb[i].turnaround_time);
}
我希望以这样一种方式对齐表:数据位于它们各自的列中,但表列不会停留在一行中。
我如何纠正这个问题?
发布于 2020-12-01 22:22:07
制表符确实有其位置,但对于将可变长度的数据项对齐为固定宽度的列来说,它们过于严格。printf()
- sprintf()
格式填充、宽度说明符、左对齐和右对齐技术对于您想要做的事情都很有用。在底部有一个参考链接,描述了这些方法和其他方法的详细信息。
在设计表时需要考虑的事项:
下面的代码提供了几个使用这些技术的示例:
printf("|%-10d|, |%10d|\n", 1, 2);//left and right justtification within field
int pad1 = 5;
int pad2 = 10;
printf("|%.*d|, |%.*d|\n", pad1, 1, pad2, 2);//"*", variable padding within field
printf("|%-15s|\n", "string");// - left justifies
printf("|%15s|\n", "another string");// - right justifies
char *pad = " "; //10 spaces
printf("|%s%*s|\n", pad, -9, "string");//combination of padding and justification
假设参数如下:
typedef enum {
Student,
Bartender
}enum_e;
typedef struct {
int processid;
int threadid;
int t_state;
enum_e p_type;
int light_beer_required;
int light_beer_consumed;
int wake_count;
int turnaround_time;
} pcb_s;
pcb_s pcb[3] = { {1234, 3, 1, Student, 1, 1, 2, 12},
{2345, 2, 2, Bartender, 1, 1, 2, 12},
{3456, 1, 3, Student, 1, 1, 2, 12} };
...Following是您的代码,修改后仅使用其中一种技术:
for (int i = 0; i < size; i++)
{
// printf("|%d\t\t| %d\t\t| %d\t\t\t| %d\t\t\t| \
%d\t\t\t| %d\t\t\t| %d\t\t\t\t|%s\t\t| \
%d\t\t\t| %d\t\t| %d\t\t| %d\t\t|\n",
printf("|%10d|%3d|%3d|%3d|%3d|%3d|%3d|%15s|%3d|%3d|%3d|%d|\n",
pcb[i].processid, pcb[i].threadid,
(pcb[i].t_state == 1)?1:0,
(pcb[i].t_state == 2)?1:0,
(pcb[i].t_state == 3)?1:0,
(pcb[i].t_state == 4)?1:0,
(pcb[i].t_state == 5)?1:0,
(pcb[i].p_type == Student)?"Student": "Bartender",
pcb[i].light_beer_required,
pcb[i].light_beer_consumed,
pcb[i].wake_count,
pcb[i].turnaround_time);
}
以上输出:
Here is a resource,详细介绍了这些和许多其他格式化技术。
https://stackoverflow.com/questions/65091366
复制相似问题