Linker-pad printf met spaties

Hoe kan ik een tekenreeks met spaties aan de linkerkant vullen als ik printf gebruik?

Ik wil bijvoorbeeld “Hallo” afdrukken met 40 spaties ervoor.

Ook bestaat de string die ik wil afdrukken uit meerdere regels. Moet ik elke regel afzonderlijk afdrukken?

EDIT: voor alle duidelijkheid: ik wil precies 40 spaties voor elke regel.


Antwoord 1, autoriteit 100%

Als u wilt dat het woord “Hallo” wordt afgedrukt in een kolom van 40 tekens breed, met spaties aan de linkerkant, gebruikt u het volgende.

char *ptr = "Hello";
printf("%40s\n", ptr);

Dat geeft je 35 spaties en daarna het woord ‘Hallo’. Dit is hoe je dingen opmaakt als je weet hoe breed je de kolom wilt, maar de gegevens veranderen (nou ja, het is eenmanier waarop je het kunt doen).

Als je weet dat je precies 40 spaties en wat tekst wilt, sla dan de 40 spaties op in een constante en druk ze af. Als u meerdere regels moet afdrukken, gebruikt u ofwel meerdere printf-instructies zoals hierboven, of u doet het in een lus, waarbij u de waarde van ptrtelkens verandert.


Antwoord 2, autoriteit 54%

Ik gebruik deze functie om mijn uitvoer te laten inspringen (bijvoorbeeld om een ​​boomstructuur af te drukken). De indentis het aantal spaties voor de tekenreeks.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

Antwoord 3, autoriteit 36%

int space = 40;
printf("%*s", space, "Hello");

Deze instructie reserveert een rij van 40 karakters, print string aan het einde van de rij (verwijder extra spaties zodat de totale rijlengte constant 40 is).
Hetzelfde kan als volgt worden gebruikt voor tekens en gehele getallen:

printf("%*d", space, 10);
printf("%*c", space, 'x');

Deze methode waarbij een parameter wordt gebruikt om spaties te bepalen, is handig wanneer een variabel aantal spaties vereist is. Deze uitspraken werken nog steeds als volgt met letterlijke gehele getallen:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

Ik hoop dat dit iemand zoals ik in de toekomst helpt.


Antwoord 4, autoriteit 15%

Als je precies 40 spaties voor de tekenreeks wilt, moet je het volgende doen:

printf("                                        %s\n", myStr );

Als dat te vies is, kun je het volgende doen (maar het zal langzamer zijn dan het handmatig typen van de 40 spaties):
printf("%40s%s", "", myStr );

Als u wilt dat de tekenreeks in kolom 40 wordt uitgelijnd (dat wil zeggen, maximaal 39 spaties hebben, zodat het meest rechtse teken in kolom 40 staat), doe dan dit:
printf("%40s", myStr);

Je kunt ook “maximaal” 40 spaties achter de string plaatsen door te doen:
printf("%-40s", myStr);

Other episodes