2017-11-25 24 views
-1

Cでかなり印刷しようとすると、正しく整列させることができません。私は長い間試してきましたが、オンラインでヘルプを見つけることができませんでした。 誰かがなぜこれがうまくいかず、代わりに何をすべきか説明してもらえますか?Cantはprintfコードを正しく整列します

私はあなたがヘッダの"%-27s"として"FULDE NAVN"を印刷 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

しかし、カントはそれを作るように見えます両方ともそこにいるとの仕事..... – kongen

答えて

0

に名をフォーマット)にあり、苗字。

次のように行います:私は見つけたそれは...整列リストを作成し、それらの1つを取り外し、私はfirst_nameの両方を持っているとLAST_NAMEという事実とは何かを持っている

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

...それらを正しく揃えることを望みます。しかし、氏名は"%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", 

に変更されるべきではないしています。

私の提案は、最初に使用して1つの文字列を作るの行としてヘッダーのために使用されているものと同じものに変数にformatStrを保存し、そしてb)自分自身の文字列sprintf(full_name, "%s %s", first_name, last_name)