Hallo en welkom.
In deze lezing wil ik het hebben over invoer van het toetsenbord lezen.
Dit is een basisconcept dat ik wilde dat jullie
vroeg zouden leren omdat het erg waardevol is en veel programma's hebben input nodig.
Dat heb ik dus al vroeg aangegeven.
Sommige van de concepten zijn niet gaat helemaal duidelijk worden.
Maar deze gaan we zeker leren concepten in andere secties terwijl we doornemen,
maar het is belangrijk om: leer dit heel vroeg, en het lijkt
erg op de printf-functie.
Dus we hebben de output besproken.
We weten hoe we moeten formatteren uitvoer met printf.
We moeten nu een beetje leren beetje over input, in wezen input
van de gebruiker krijgen.
Het is erg handig om de gebruiker te vragen om gegevens in een programma in te voeren.
We hadden het over de opdrachtregel argumenten die gegevens op die manier invoeren, dat is
een manier om het te doen.
Een andere manier is om de gebruiker te vragen: rechtstreeks zodat ze iets op
het toetsenbord kunnen typen.
Dus je krijgt de input van het toetsenbord, maar het wordt weergegeven, u
voert de invoer in via de terminal de console.
Zo voer je de invoer in.
De c bibliotheek bevat verschillende invoerfuncties.
We gaan scanf gebruiken.
Dat is de meest algemene functie.
Het is erg handig.
Het biedt verschillende formaten die u kunt invoeren.
Dus je kunt tekst invoeren en dan zal het worden geconverteerd naar verschillende formaten.
Dus scanf leest de invoer van de standaard invoerstroom, dat is stdin.
Scanf kan daadwerkelijk worden gebruikt voor: lezen van bestanden ook als de invoerstroom
een bestand is.
Maar we gaan ons geen zorgen maken over
dat alles voor nu, we gaan het gewoon gebruiken om invoer van het toetsenbord lezen.
Oké, en zo door standaard is het toetsenbord.
Stdin is een stroom.
Streams en c, drieën verschillende stromen.
De foutenstroom, standaard in- en standaarduitgang.
Standaard in standaard is het toetsenbord.
Dus dat gaan we zo houden.
En met scanf gaat het lezen van standaard in en vervolgens op basis van wat
u invoert of hoe je wilt de gegevens opslaan,
ik zou zeggen, het gaat converteren wat je hebt ingevoerd, want
wat je invoert, zal tekst zijn.
Het gaat die tekst converteren naar het formaat dat u zo hebt opgegeven.
Het gaat formaatspecificaties gebruiken net als de printf-functie.
Het formaat kan dus een reeks zijn van tekens, wat een string wordt genoemd.
Dat hebben we niet bestudeerd nog veel in detail.
Maar nogmaals, we zullen wanneer we hebben het over gegevenstypen.
En dan kun je ook specificeren andere gegevenstypen waar we het
over gaan hebben, zoals: gehele getallen, getallen eigenlijk.
U kunt dus cijfers lezen.
U kunt strings lezen.
U kunt nummers lezen die bevatten decimalen, enkele individuele karakters,
al deze leuke dingen.
Als de standaard in wordt ingevoerd vanuit het toetsenbord dat standaard is, wat er
gaat gebeuren, is terwijl je tekst typt via het toetsenbord, het
neemt die tekst, zet het in het c-programma en het gaat die tekst converteren.
En tekst is dingen als letters, cijfers en leestekens.
Dus ook al ben je aan het typen een nummer, het is nog steeds tekst omdat
het van het toetsenbord komt.
Dus als u het gehele getal 2014 invoert, wat een getal is en in wezen wat er gebeurt, is dat je aan
het typen bent tekens twee nul één en vier.
En wat gebeurt er en wat? zal gebeuren, is dat het die
invoer naar het c-programma zal sturen.
En als u die gegevens wilt opslaan als een getal, dan zul je
die gegevens moeten converteren.
En dus moet je het formaat specificeren specificeren hoe u het wilt converteren, net zoals
u doet op de printf.
Onthoud zoals met printf die je gebruikt procent d om een geheel getal af te drukken.
Je zou de tekst converteren naar een geheel getal dat ook procent d gebruikt voor
scanf als je dat zou willen converteer de string naar een getal.
En daar gaan we voor om vroeg te doen voor de basis.
We gaan gewoon cijfers gebruiken omdat
we tot nu toe cijfers kennen, en niet echt nog geleerd over snaren.
Dus we gaan vooral gebruik cijfers wanneer we invoeren.
Dus scan.
Het lijkt erg op printf.
Maar in plaats daarvan is het een beetje anders in bepaalde argumenten die nodig zijn.
Het gebruikt nog steeds een controlestring gevolgd door een lijst met argumenten.
Dus er gaat iets zijn in die dubbele aanhalingstekens.
De dubbele aanhalingstekens zullen meestal bevatten slechts één ding en het zal
de formaatspecificatie zijn.
Hoe u de gegevens gaat converteren.
Dus de besturingsreeks geeft aan: de bestemmingsgegevenstypen voor de invoerstroom
van tekens.
Het is die formaatspecificatie, procent d, procent c, procent s,
procent f voor stroom enzovoort.
De printf-functie gebruikt variabele namen, constanten en uitdrukkingen in zijn
argumenten omdat we dat leren.
Je hebt iets tussen dubbele aanhalingstekens.
En dan in de dubbele aanhalingstekens, gebruik je formaatspecificaties.
En dan na de komma's, jij kunt variabelen afdrukken of u
kunt zelfs uitdrukkingen afdrukken.
Uitdrukkingen, we zullen het hebben over ook meer detail, iets dat
in wezen een waarde retourneert.
Meest voorkomende type expressie is een rekenkundige uitdrukking.
De scanf-functie is anders want in plaats van
variabelen weer te geven, gaat het: gebruik variabelen waarnaar wordt verwezen.
Maar gelukkig tips is een groot begrip in c.
Je hoeft niets te weten over pointers om de scanf-functie te
begrijpen en te gebruiken.
Dus maak je daar geen zorgen over.
Oké, het enige wat je hoeft te doen ben jij moet drie regels over
de scanf-functie onthouden om deze te kunnen gebruiken.
Het gaat het aantal teruggeven van items die het met succes leest.
Dus als het één variabele leest, twee variabelen, drie variabelen, het zal
dat teruggeven.
Als u scanf gebruikt om een waarde te lezen voor
een van de basisvariabelen die we gaan bespreken, zoals: zoals de int, de float, de double, dan
hoef je alleen maar de variabelenaam, moet het argument worden voorafgegaan
door een ampersand.
Je hoeft niet eens te weten waarom dat is nu,
maar doe het gewoon, een van de basisgegevenstypen.
Ampersand is adres.
En omdat scanf een pointer neemt je moet de-refereren, je moet
het adres doorgeven.
Het derde ding dat je moet onthouden voor scanf.
Als u scanf gebruikt om a . te lezen tekenreeks die een reeks tekens
in een teken is, u hoef je de ampersand niet te gebruiken.
Dus scanf duurt in principe twee argumenten waarvan ik u een
voorbeeld ga laten zien.
Het eerste argument zal zijn hoe? om de gegevens die u typt te converteren.
En als je die gegevens opslaat in int gebruik je procent
gebruik de opmaakspecificatie procent d.
Als u wilt opslaan in string waar we nog niets over hebben
geleerd, gebruik je procent s.
En dan is het tweede argument en het kunnen veel argumenten zijn, afhankelijk
van het aantal formaatspecificaties dat u gebruikt omdat net zoals printf de eigenlijke variabele
zou zijn, de naam van de variabele.
En als de variabele alles is behalve een string, gebruik je gewoon de ampersand.
Anders doe je dat niet gebruik de ampersand.
Scanf-functie maakt ook gebruik van witruimte om te beslissen hoe de invoer in
afzonderlijke velden moet worden verdeeld.
En witruimte omvat nieuwe regels, tabs en spaties.
En nogmaals, ik zal een voorbeeld doornemen om u te
laten zien wat dat betekent, want net zoals printf veel kan weergeven, veel
variabelen, afhankelijk van het aantal formaatspecificaties dat u in de enkele aanhalingstekens, hetzelfde met scanf.
Als scanf meerdere dingen heeft binnen de dubbele aanhalingstekens,
zal het meerdere invoer lezen.
En de ingangen gaan te verdelen door nieuwe lijnen.
Dus nogmaals, als je het wilt proberen om te begrijpen wat scanf is,
is het het tegenovergestelde van printf.
Printf gaat gehele getallen converteren, drijvende-kommagetallen, tekenreeksen, al deze verschillende gegevens typen
en het gaat het naar tekst
converteren, zodat u het kunt zien als uitvoer.
En het gaat worden weergegeven op het scherm.
Scanf is het tegenovergestelde.
Het gaat als input nemen tekst en converteer het naar een van de verschillende
gegevenstypen zoals ints, floats en doubles.
Laten we dus naar een voorbeeld kijken.
Dit is een voorbeeld van ons een eenvoudig programma.
We weten wat de belangrijkste routine is.
We weten wat de include-richtlijn is.
We hebben niets geleerd over tekens en gehele getallen nog.
Maar eigenlijk helemaal bovenaan hoofdfunctie, we maken twee
variabelen omdat we moeten opslaan de gegevens, en we gaan
veel gedetailleerder over variabelen praten.
Maar net als de printf-functie, nogmaals, je doet gewoon het tegenovergestelde.
Dus hier tonen we de uitvoer naar het scherm zegt voer een waarde in.
Scanf binnen de dubbele quotes heeft formaatspecificaties om in de
invoer te lezen.
En dus moet je de . specificeren gegevens die worden
ingelezen, hier staat procent s, procent d.
Wat dat betekent is dat we lezen in a string, dan lezen we in een int.
En je zult merken dat de string heeft geen ampersand en scanf na
de eerste komma.
En na de tweede komma hebben we een ampersand omdat dat een geheel getal is.
We lezen een getal in.
En dan de printf geeft output weer.
Dus er staat dat je hierin bent ingevoerd tekenreeks in dit gehele getal, net
zoals we weten wat printf doet en dan de hoofdfunctie retourneert een nul.
Oké, dus laten we dit doornemen voorbeeld in een seconde in codeblokken.
Maar laten we het gewoon herhalen een paar concepten.
Wanneer een programma scanf gebruikt om invoer van het toetsenbord verzamelt, wacht het
totdat u wat tekst invoert.
Het programma gaat dus echt door om te pauzeren totdat u de gegevens invoert.
En als je eenmaal wat tekst hebt ingevoerd.
En als je wat witruimte invoert, als je meerdere dingen invoert, gaat
het programma verder en leest de invoer zodra u daadwerkelijk op
de enter-knop drukt.
Je moet op de enter-knop drukken.
Nogmaals, scanf verwacht input in de exact hetzelfde formaat dat u heeft opgegeven.
Dus als je procent s en procent zegt e, dat betekent dat
je een string moet opgeven gevolgd door een spatie, een willekeurig aantal spaties
gevolgd door een geheel getal, een getal en een woord.
String is een woord integer is een getal.
Dus laten we dit voorbeeld doornemen regel voor regel in codeblokken.
Oké, hier hebben we dan onze hoofdfunctie.
En nogmaals, het is belangrijk om te zijn gegevens in een programma kunnen invoeren.
Dus net als de printf, het gaat om erg op elkaar te lijken, en we hoeven
niet al deze code te begrijpen.
En we doen zelfs afstand van de parameters die
worden doorgegeven, eenvoudige hoofdfunctie.
We hoeven niet begrijp al deze code.
We hoeven het niet eens te begrijpen welke variabelen zijn op dit punt.
Maar variabelen zullen gegevens opslaan.
In het voorbeeld maken we een string array van 100 en met een puntkomma en dan zijn we ga
ook gewoon een geheel getal maken,
net als in printf.
We hebben een geheel getal, maar we gebruiken een string.
Ik wil gewoon demonstreren verschillende ingangen.
Dan meestal wanneer voor jou bel de scanf-functie om invoer van het toetsenbord te krijgen,
je bent altijd de gebruiker iets gaan vertellen.
Je wilt ze vertellen wat ze moeten invullen.
Dus printf, onthoud, geeft gegevens op het scherm weer.
We gaan gewoon zeggen voer een waarde in.
En dat gaan ze ook echt doen voer een paar in en dan eindigen we het
met een puntkomma.
We moeten het vertellen gebruiker om iets in te voeren.
Nu hier is waar we gebruik de scanf-functie.
We zeggen scanf en dan in de tussen haakjes het eerste argument tussen
de dubbele aanhalingstekens gaat gegevens zijn die we gaan lezen.
Dus laten we in dit voorbeeld gewoon stel dat we maar
één invoerpercentage d gaan lezen, wat een int is.
En dan gaan we sla die gegevens op in een variabele
omdat we ernaar willen kijken.
En ik zal het zijn.
Nu moeten we de ampersand . specificeren daarvoor, want onthoud dit kleine
trucje met wijzers.
Je hoeft het niet te weten waarom, het is gewoon het adres.
Dus die scan, op regel 17, gaat... daadwerkelijk gegevens van het toetsenbord lezen totdat de
gebruiker op de enter-knop drukt.
En dan gaan die gegevens worden opgeslagen in een variabele met de naam I.
Dus nu willen we gewoon print wat we hebben ingevoerd.
Dus hier gaan we gewoon zeggen, we gaan een line feed toevoegen zodat het leesbaar
is, dus dat gaan we doen gebruik onze ontsnappingsreeks, backslash
n en we gaan je zeggen.
Je hebt procent d ingevoerd en we gaan om de waarde van de variabele weer te geven.
En we gaan ook zet er een linefeed achter.
Dus de waarde van de variabele dat we willen weergeven is i.
We gaan eindigen het met een puntkomma.
En dan is dat ons programma.
Dus nogmaals printoutput, vragend om een waarde, het lezen van een invoerregel 17 die aangeeft dat de gegevens
die we lezen is een geheel getal, sla het op in, ik gebruik
een ampersand, en dan print uit wat we zojuist hebben ingevoerd.
Dus laten we dit bouwen en uitvoeren.
En je zult zien dat het programma begint en dan pauzeert het omdat het wil dat
je een waarde invoert.
Er staat: voer een waarde in.
Dus op dit punt moet ik a . invoeren getal dat ik naar een string kan converteren, want dat
is wat er gebeurt.
Dus hier ga ik gewoon zeggen 56.
En dan druk ik op enter.
Het liep twee keer omdat mijn virusscanner.
Dus ik ga 56 zeggen en ga dan naar binnen.
En dan wordt het afgedrukt, ik heb 56 ingevoerd.
Dus ik kon informatie invoeren, nummer en het heeft het opgeslagen in een variabele.
Nu, net als printf, je kunt ze eigenlijk meerdere dingen
laten invoeren en opslaan in meerdere variabelen.
Dus hier nadat ze eindigen op een geheel getal, ik ga nog
een procent zeggen, formaatspecificatie procent s, wat betekent dat ik wil dat ze een tekenreeks invoeren, wat
gewoon een zoekwoord is.
Dus hier, onthoud, als het een woord is, ik hoef je het ampersand niet op te geven.
Dus ik ga gewoon zeggen roer, ik wil die gegevens
opslaan in de variabele winkel.
En nogmaals, we leren over variabelen.
En dan ga ik om het gewoon uit te printen.
En ik heb nog een variabele toegevoegd dus je kent de printf en ik zal gewoon
dubbele punten plaatsen voordat jij ook hebt om het formaat op te geven
dat u afdrukt, dus het zijn procent s.
Dus hopelijk is dat duidelijk.
Ik ga nu in tweeën lezen invoer gescheiden door spaties, sla ze op in
twee variabelen, I en roer en laat ze vervolgens zien.
Dus als we nu bouwen en rennen.
Dus hier ga ik mijn . invoeren nummer 22, ik ga op spatie drukken en dan ga ik mijn naam invoeren en dan
druk ik op return.
Als ik dat doe, wordt het programma gaat op pauze en het
zal het nummer I . weergeven ingevoerd en vervolgens de tekenreeks.
Dus het toont 22 en Jason.
Dus dit is hoe je kunt krijgen invoer van de gebruiker, eenvoudige vier
of vijf regels code.
Een ander snel ding dat ik wil laten zien je is hoe je kunt lezen in een dubbel.
Dus later in de lessen ben je zal worden getoond hoe in te lezen in float
en dat is meestal met behulp van een formaat gespecificeerd percentage f.
Maar als je rent en dubbel leest, het is eigenlijk een beetje
anders dat je procent lf gebruikt, dus een soort van houd dit in je achterhoofd.
Als ik een variabele naam dubbel x aanmaak en dan gebruik ik scanf om dat in te lezen, ik moet
het inlezen met procent LF.
Dat is het formaat specificatie die u wilt gebruiken.
En dan weer net als de andere, gebruik je het ampersand
voor adres en zeg je x.
En zo kun je dat specifiek gelezen in een dubbel.
En dat is anders dan lezen in een stroom.
Houd dit dus in je achterhoofd.
Als je dit gaat uitvoeren, zul je het merken het werkt vrij eenvoudig.
En u kunt invoer lezen dubbel lezen.
Dus ga je gang en voer dat uit.
En dus gaat het erom vragen dubbel, ik heb niet echt veel gedaan.
En dit verdubbelt als 77. 8 en dan lezen we het in en slaan het op,
het is vrij eenvoudig.
Dus de scan is erg handig zoals ik al zei.
Andere dingen met de scanf je zult merken dat als
je door de cursus gaat, dat scanf werkt soms niet zo goed.
Je kunt f get s voor andere dingen gebruiken.
Het belangrijkste probleem met scanf is: als je inleest, lees je alleen in
totdat je een spatie ziet.
En dus als je probeert te gebruiken scanf, je probeert het meerdere
keren aan te roepen in een functie.
Met andere combinaties kan het werkt niet erg goed,
want wat er gebeurt, is wanneer je op de drukt return-knop op
het toetsenbord, het gaat naar het gaat niet lees die return-knop, want die leest
alleen op in een woord.
En dus gaat het niet om de regelinvoer te krijgen.
Dus de volgende keer dat u scanf gebruikt, het gaat die regel meteen overslaan
en het gaat om in de regelinvoer te lezen.
Dus dit is een probleem dat je zult zien als u meerdere
scanfs achter elkaar in een enkel programma schrijft, je
zult merken dat de andere scanfs niet worden uitgevoerd omdat ze lezen in de line feed.
Een heel gemakkelijke manier om dat te omzeilen is direct nadat je een scan hebt gedaan, je
belt gewoon git char en dan bel je een andere scanner, maar dat is meer een concept
om later over te praten.
Dit was alleen om je te laten zien wanneer je leest in een dubbel met
scanf, zorg ervoor dat je procent LF gebruikt.
En nogmaals, dit is handig omdat: sommige van onze uitdagingen zullen u op één lijn
brengen om input van de gebruiker te krijgen om nuttige dingen
te doen en verschillende concepten te leren, input van de gebruiker kunnen krijgen.
Dus ik hoop dat dit heeft geholpen.
En nogmaals, maak je geen zorgen over
sommigen van deze concepten dat je dingen niet helemaal begrijpt zoals variabelen en strings,
we gaan dat allemaal bespreken tot in de details, bedankt.