Het hardcoderen van cijfers is prima voor een eerste poging, maar echte software moet reageren op wat mensen typen. Het originele fragment gebruikte constanten. Het is statisch. Voorspelbaar. Saai.
Om een programma nuttig te maken, moet u tijdens runtime gegevens van de gebruiker ophalen. Dit doe je met scanf. Het is de tegenhanger van printf. Waar printf gegevens naar het scherm duwt, haalt scanf deze vanaf het toetsenbord naar binnen.
Hier leest u hoe u met basisinvoer van gehele getallen in C omgaat.
Gebruikersinvoer vastleggen
Je kunt niet zomaar een variabele declareren en verwachten dat deze op magische wijze gebruikersgegevens vasthoudt. Je moet erom vragen. U moet de computer ook * vertellen waar * de gegevens moeten worden opgeslagen. Daarom vereist scanf een pointer (het & -symbool). Als u het ampersand vergeet, crasht het programma of schrijft het afval naar het geheugen. Neem dit altijd op voor primitieve typen zoals int.
Overweeg deze bijgewerkte logica:
- Declareer variabelen om de invoer en het resultaat vast te houden.
- Vraag de gebruiker zodat deze weet wat hij moet typen.
- Gebruik
scanfmet de juiste formaatspecificatie (%dvoor gehele getallen). - Voer de berekening uit met behulp van de opgeslagen waarden.
- Voer het resultaat uit door de invoervariabelen in de printstring te mengen.
Waarom dit belangrijk is
De verschuiving van constanten naar variabelen verandert alles. Het programma is niet langer een gebroken record. Het past zich aan. Je kunt het één keer uitvoeren met 5 en 7. Je kunt het opnieuw uitvoeren met 100 en 200. De logica blijft hetzelfde; de gegevens veranderen.
Dit is de basis van interactieve CLI-toepassingen (Command Line Interface). Voordat u complexe tools kunt bouwen, moet u begrijpen hoe u gegevens veilig in uw variabelen kunt krijgen.
Belangrijkste afhaalrestaurants
scanfheeft een pointer nodig: Gebruik altijd de operator adres-van (&) vóór de naam van uw variabele inscanf.- Formaatspecificaties moeten overeenkomen: Als u een
intleest, moet u%dgebruiken. Het gebruik van%fvoor een geheel getal zal ongedefinieerd gedrag veroorzaken. - Prompts zijn cruciaal: Zonder een duidelijke prompt zoals “Voer de eerste waarde in:”, blijft de gebruiker naar een knipperende cursor staren en vraagt zich af of het programma vastgelopen is. Dat is het niet. Het is gewoon wachten.
De code werkt. Het is eenvoudig. Maar het is functioneel. U bent overgestapt van een statisch script naar een dynamische tool. De volgende stap is meestal het afhandelen van fouten. Wat gebeurt er als de gebruiker ‘hallo’ typt in plaats van een cijfer? scanf zal stilzwijgend mislukken, waardoor uw variabelen niet geïnitialiseerd blijven. Dat is een probleem voor een andere dag.
Voorlopig heb je een programma dat daadwerkelijk luistert.
Input, output en de regels voor betrokkenheid
Je hebt de wijzigingen aangebracht. Nu compileren. Voer het uit. Als het crasht, raak dan niet in paniek. Er is waarschijnlijk een klein syntaxisdetail gemist.
Neem ‘scanf’. Het bootst printf na in het gebruik van formatstrings. Typ man scanf als u de kleine lettertjes nodig heeft. Maar let op het ampersand (& ) vóór variabelen als a en b.
Dit is de adresoperator.
Het retourneert het geheugenadres van de variabele. Het ziet er nu misschien verwarrend uit. Aanwijzingen zullen dit later verduidelijken. Maar volg voorlopig de regel: als je scanf gebruikt op een char, int of float, heb je de & nodig. Ook voor constructies heb je het nodig.
De & overslaan? U krijgt een runtime-fout. Breek het opzettelijk. Kijk wat er gebeurt. Het is de enige manier om te onthouden waarom het ertoe doet.
Uitvoer nauwkeurig opmaken
Laten we printf ontleden. Begin eenvoudig.
printf("Hallo");
Hierdoor wordt het woord “Hallo” naar de standaarduitvoer verzonden. Niets anders. Geen nieuwe regel. De cursor blijft direct na de “o” staan.
Voeg nu een nieuwe regel toe.
printf("Hallo\n");
De \n activeert een harde return. De uitvoer eindigt op een eigen regel. Dit is de standaardverwachting voor schone console-uitvoer.
Voor variabelen zijn tijdelijke aanduidingen vereist. Om de waarde van b af te drukken:
printf("%d", b);
De %d is een tijdelijke aanduiding. Wanneer de code wordt uitgevoerd, ruilt printf deze om voor de feitelijke gehele waarde van b.
U kunt waarden in zinnen insluiten. Je kon meerdere oproepen aan elkaar koppelen:
printf("De temperatuur is "); printf("%d", b); printf("graden\n");
Maar dat is vervelend. De schonere aanpak combineert ze in één formaatreeks:
printf("De temperatuur is %d graden\n", b);
Meerdere waarden werken ook.
printf("%d + %d = %d\n", a, b, c);
Hier is de val. Het aantal tijdelijke aanduidingen in de notatietekenreeks moet overeenkomen met het aantal variabelen dat erop volgt. Precies.
Als u drie %d -tags heeft, heeft u drie parameters nodig. De typen moeten overeenkomen. De volgorde moet overeenkomen. Komen deze niet overeen? De output zal afval zijn. Of erger nog, het zal crashen.
Typen matchen met tijdelijke aanduidingen
printf verwerkt de meeste standaard C-typen. Je hebt alleen de juiste code nodig.
- int gebruikt
%d - float gebruikt
%f - char gebruikt
%c - tekenreeksen gebruiken
%s
Voor diepere nuances controleer je man 3 printf op een UNIX-systeem. Uw specifieke compiler heeft waarschijnlijk een handleiding of helpbestand waarin randgevallen worden behandeld.
Veelvoorkomende valkuilen
Nieuwe ontwikkelaars struikelen hier herhaaldelijk over.
Hoofdlettergevoeligheid is strikt. printf is een kleine letter. Printf of PRINTF zal mislukken.
scanf vereist de adresoperator (& ). Vergeet het maar, en het programma zal uw invoer niet correct opslaan.
Het aantal parameters is belangrijk. Te veel of te weinig argumenten in printf of scanf leiden tot ongedefinieerd gedrag.
Verklaring gaat vóór gebruik. U kunt een variabelenaam in C niet gebruiken zonder deze eerst te declareren. De compiler moet vooraf de geheugenindeling en het geheugentype kennen.
De compiler raadt het niet. Het dwingt af.






















