[C] printf variabel uitlijnen

Pagina: 1
Acties:
  • 422 views sinds 30-01-2008
  • Reageer

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Ik ben een programmatje aan het schrijven dat een teskt bestandje leest en de inhoud hiervan weer netjes uitprint. Dit soort programmatjes staan ook wel bekend als pretty-printers.

Wat er moet gebeuren is dit, in het bron bestand staan regels met de volgende opmaak: naam = omschrijving.

Het programma sorteert deze en moet het is-gelijk-teken uitlijnen op dezelfde positie. Een functie zoekt de langste naam op en telt hier twee bij op. Maar niet alle namen zijn even lang, met de C funtie printf kun je op de volgende manier een vaste lengte aangeven voor een string:

code:
1
printf("%-20s = ", variabele);


De tekst zal nu links worden uitgelijnd en het is-gelijk-teken komt op de 22ste positie.

Mijn vraag is nu, hoe kan ik deze 20 tekens variabel maken? Het zou er dus is pseudo zo uitzien:

code:
1
printf("%-[langste_naam]s", variabele);


waarbij langstenaam een integer-variabele is.

Iemand een idee?

www.fendt.com | Nikon D7100 | PS5


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Eerst het volledige tekstbestand inlezen in een buffer, dan bepalen wat de langste naam is en dan die grootte gebruiken.

https://fgheysels.github.io/


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Dat zeg ik toch? Ik zou graag willen weten hoe ik de lengte variabel kan maken, dat zoeken naar de langste lukt wel.

www.fendt.com | Nikon D7100 | PS5


Verwijderd

printf("%-*s", breedte, variable); /* De * formatter dus */

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Een andere optie is om met sprintf ( format, "%%%d-20s", strlen(langste_naam) );
eenmalig de format string te maken. Dan doe je vervolgens printf( format, variabele );

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

exact, je moet gewoon eerst de formatstring genereren, en die vervolgens weer als eerste argument aan printf meegeven. zo ingewikkeld kan dat toch niet zijn ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
aha, ik gebruik nu de methode van mietje, werkt goed. Dank je wel. Heb net ook een reference gevonden waar het uitgelegd staat, nu weet ik ook hoe het werkt en niet alleen 'dat' het werkt.

www.fendt.com | Nikon D7100 | PS5


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hm * drm las niet goed |:(
ik kende die * niet eens :)

weer wat geleerd

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1