c語言格式化輸出控制長度
今天在實作ls指令的時候,輸出的檔案名是上下對齊:
a.c b crawler text 公共的 視訊 文檔 音樂
c c a.out b.c git win 模闆 圖檔 下載下傳 桌面
便想着實作對齊,想到了c的格式化輸出:
printf("%-10s",s);
這樣便實作了将字元串s占10格居左輸出.
但卻由一個難以解決的問題,上述的 10 不能提前預支,是程式運作時計算出來的,便想着能否這樣輸出:
int a=;
char s[]="hell";
printf("%-%ds",a,s);
實際證明這樣時不行的,必須想别的解決辦法.
然後觀察printf的格式,printf的格式控制是在”“之中的,是否意味着可以用字元串代替”“,然後嘗試:
char a[]="%05s";
char s[]="hello";
printf(a,s);
成功輸出:
hello
看來這樣可行,便編寫了代碼:
int n=;
char na[];
if(n > ) {
na[] = (n/) + ;
na[] = (n%) + ;
na[] = '\0';
}
else {
na[] = n + ;
na[] = '\0';
}
char a[]="%-";
strcat(a,na);
char s[]="s ";
strcat(a,s);
char b[]="hellow";
puts(a);
printf(a,b);
n為ls輸出的檔案名的最大長度(目測應該不會大于99).