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 !!
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 !!
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;
}
ok, dziękuję ..... – Akash
Wersja z mniejszym pisaniem: 'printf ("%. * S% s ", n> = 10? 0: (int) (10-n)," 0000000000 ", s);' –
To naprawdę pomaga. Dziękuję, zwol. –
Spróbuj tego:
printf("%010d%s", 0, "this");
To wypisze '0000000000', a następnie ciąg; OP chciał w sumie 10 znaków –
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
Miło, ale to nie jest C –
To znaczy, wyściółka w 'printf', nie' scanf', nie ty? – zwol
tak, przepraszam, tylko edytowałem to – Akash
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