2017-11-25 340 views
-1

当我尝试在C中打印漂亮时,似乎无法使其正确对齐。我已经尝试了很长一段时间,并且无法在网上找到任何帮助。 有人可以解释为什么这不起作用,我应该做什么呢?无法正确对齐printf代码

我想正确地调整他们.. This is how it looks

printf("%-20s%s %-22s%-12d" 
    "%-12s%-12s%-12s%-12s\n", 
    cyclist[i]->race_name, cyclist[i]->first_name, cyclist[i]->last_name, cyclist[i]->age, 
    cyclist[i]->team, cyclist[i]->nation, cyclist[i]->placement, cyclist[i]->race_time); 

页眉打印

void print_header(){ 
printf("-------------------------------------------------------------------------------------------------------\n"); 
printf("%-20s%-27s%-12s%-12s%-12s%-12s%-12s\n", "RACE NAME", "FULDE NAVN", "ALDER", "HOLD", "NATION", "PLADS", "TID"); 
printf("-------------------------------------------------------------------------------------------------------\n"); 

}

+0

我发现它有事情做的事实,我既有FIRST_NAME和LAST_NAME ...去除其中的一个进行对齐列表中,但不能似乎使它与双方共事..... – kongen

回答

0

使用先作一个字符串,姓。

这样做:

printf("%-20s%-27s%-12d" 
    "%-12s%-12s%-12s%-12s\n", 
    "race_name", "first_name last_name", 25, 
    "team", "nation", "placement", "race_time"); 
0

您打印"FULDE NAVN"作为"%-27s"的头。但是打印的名字和姓氏为"%s %-22s"。这些格式不相同,如果名字长度超过4个字符,将会出现问题。

我建议你为全名列创建一个名称的临时字符串,并将其打印为单个字符串。

也许类似

char full_name[28]; 
snprintf(full_name, sizeof(full_name), "%s %s", 
    cyclist[i]->first_name, cyclist[i]->last_name); 

printf("%-20s%-27s%-12d%-12s%-12s%-12s%-12s\n", 
    cyclist[i]->race_name, full_name, cyclist[i]->age, ...); 

现在的格式都头和数据打印输出将是相同的。

0

第二%s没有数里面

printf("%-20s%s %-22s%-12d" 
    "%-12s%-12s%-12s%-12s\n", 

应改为

printf("%-20s%10s %-22s%-12d" 
    "%-12s%-12s%-12s%-12s\n", 

然后,当然,头部的其余部分将需要排队。

我的建议是,以一)formatStr保存到一个变量的同一个用于标题为行,和b)名称格式化为自己的字符串sprintf(full_name, "%s %s", first_name, last_name)