2012-01-13 12 views
6

Czy istnieje sposób, aby zastąpić znak spacji na 0 w printf wyściółką do szerokości polaDopełnienie printf na smyczki przez 0

kod stosowany

printf("%010s","this"); 

Doesnt wydają się działać na smyczki !!

+1

To znaczy, wyściółka w 'printf', nie' scanf', nie ty? – zwol

+0

tak, przepraszam, tylko edytowałem to – Akash

+1

Technicznie, modyfikator '0' mówi:" Dla innych konwersji (* nie numerycznych, np.% S *), zachowanie jest niezdefiniowane. "Wierzę, że stare wersje HPUX (i może niektóre inne System V Unices) robiłby to dla (lub przeciw) ciebie, gdzie Linux i BSD zazwyczaj nie ... – BRFennPocock

Odpowiedz

8

Rzeczywiście, flaga 0 działa tylko w przypadku konwersji numerycznych. Trzeba będzie to zrobić ręcznie:

int print_padleftzeroes(const char *s, size_t width) 
{ 
    size_t n = strlen(s); 
    if(width < n) 
     return -1; 
    while(width > n) 
    { 
     putchar('0'); 
     width--; 
    } 
    fputs(s, stdout); 
    return 0; 
} 
+0

ok, dziękuję ..... – Akash

+2

Wersja z mniejszym pisaniem: 'printf ("%. * S% s ", n> = 10? 0: (int) (10-n)," 0000000000 ", s);' –

+0

To naprawdę pomaga. Dziękuję, zwol. –

-1

Spróbuj tego:

printf("%010d%s", 0, "this"); 
+0

To wypisze '0000000000', a następnie ciąg; OP chciał w sumie 10 znaków –

2

co

test="ABCD" 
printf "%0$(expr 9 - ${#test})d%s" 0 $test 

że da ci to, czego potrzebujemy też.

~:00000ABCD 

czy chcesz PADD z innymi numerami wystarczy zmienić

printf "%0$(expr 9 - ${#test})d%s" 1 $test 

daje

~:11111ABCD 
+1

Miło, ale to nie jest C –