2017-11-25 338 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)