C maakt het verwerken van tekst niet ingewikkeld. Het verwijdert de abstractielagen en laat je achter met de rauwe mechanica. Als je naar de C-documentatie hebt gekeken, is het je waarschijnlijk opgevallen dat alle tekstinvoer-/uitvoerfuncties zich in de stdio -bibliotheek bevinden. Dit staat voor standaardinvoer/uitvoer. Het is de basis van hoe C-programma’s met de buitenwereld communiceren.

De meeste beginners beginnen met stdin en stdout. Dit zijn standaardstromen. Ze vertegenwoordigen waar een programma gegevens ontvangt en waar het resultaten verzendt. Als uw applicatie slechts één invoerbron en één sink voor uitvoer nodig heeft, heeft u geen complex bestandsbeheer nodig. U stuurt gegevens gewoon via de opdrachtregel.

De zes basisstromen

De stdio -header biedt zes specifieke opdrachten voor interactie met deze streams. Ze zijn eenvoudig. Direct.

  • printf : schrijft opgemaakte tekst naar stdout.
  • scanf : leest geformatteerde gegevens van stdin.
  • puts : voert een tekenreeks uit naar het scherm.
  • krijgt : leest een regel tekst van het toetsenbord.
  • putc : Schrijft één teken naar stdout.
  • getc of getchar : leest een enkel teken uit stdin.

Waarom deze gebruiken? Omdat je ze kunt omleiden. Dit is waar C schittert. U hoeft uw code niet te wijzigen om vanuit een bestand in plaats van een toetsenbord te lezen. U wijzigt gewoon de opdracht die u in de terminal typt.

Tekens tellen op de gemakkelijke manier

Laten we eens kijken naar een praktisch voorbeeld. Stel je voor dat je een programma wilt dat het totaal aantal tekens in een tekstinvoer telt. Hier is de code:

Deze code wacht op invoer. Je typt regels. Als u klaar bent, drukt u op CTRL-D. Dit geeft het einde van het bestand aan (eof ). De functie gets retourneert nul wanneer deze op eof stuit, waardoor de lus wordt verbroken. De definitieve telling wordt op het scherm afgedrukt.

Maar hier is de truc. U hoefde de code niet te bewerken om tekens in een bestand te tellen. Je hebt zojuist een kleine instructie aan de shell toegevoegd.

Invoer en uitvoer omleiden

Als u dit programma heeft gecompileerd in een uitvoerbaar bestand met de naam xxx, kunt u er een bestand aan toevoegen.

Het hoekhaakje leidt de inhoud van bestandsnaam om naar stdin. Het programma denkt dat het van het toetsenbord leest. Dat is het niet. Er wordt van schijf gelezen.

Je kunt ook pijpen gebruiken. Hierdoor wordt de uitvoer van het ene commando rechtstreeks doorgegeven aan het andere.

Dit is hetzelfde resultaat. cat dumpt het bestand naar de standaarduitvoer. De pipe stuurt het naar uw programma.

U kunt de uitvoer ook omleiden. In plaats van de telling op uw scherm te zien, kunt u deze opslaan.

Nu leest xxx van bestandsnaam en schrijft het resultaat naar een nieuw tekstbestand met de naam out. Dit is krachtig. Hiermee kunt u tools aan elkaar koppelen zonder extra code te schrijven om bestandsaanwijzers te verwerken.

Wanneer streams niet genoeg zijn

Soms is omleiden niet genoeg. Misschien moet u meerdere bestanden tegelijk openen. Misschien bouwt u een teksteditor die configuratiebestanden opslaat. Misschien moet u controleren of u het einde van een bestand hebt bereikt zonder te crashen.

In deze gevallen heeft u directe bestandsfuncties nodig. Deze bevinden zich ook in stdio, maar ze werken op bestandsaanwijzers in plaats van op standaardstreams.

  • fopen : Opent een bestand om te lezen of te schrijven.
  • fclose : Sluit het bestand als u klaar bent.
  • feof : Controleert of u het einde van het bestand hebt bereikt.
  • fprintf : schrijft geformatteerde gegevens naar een specifiek bestand.
  • fscanf : leest geformatteerde gegevens uit een specifiek bestand.
  • fputs : Schrijft een string naar een bestand.
  • fgets : leest een regel uit een bestand.
  • fputc : Schrijft een teken naar een bestand.
  • fgetc : leest een teken uit een bestand.

Deze functies geven u meer controle. U kunt meerdere streams tegelijk beheren. U kunt precies bepalen welk bestand welke gegevens krijgt.

Welk pad neem jij? De eenvoud van stdin -omleiding of de controle van directe bestandsaanwijzers? Het hangt af van wat je aan het bouwen bent. Voor snelle scripts is omleiding koning. Voor complexe toepassingen heeft u de bestandsfuncties nodig.

Er bestaat geen perfect antwoord. Gewoon afwegingen.