天天看點

c語言格式化輸出控制長度c語言格式化輸出控制長度

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).