Hem - programvara
Scanf C funktion: beskrivning. Typat programmeringsspråk Vad ska man göra med alla dessa variabeltyper

Den här artikeln diskuterar scanf()-funktionen på ett allmänt sätt utan hänvisning till en specifik standard, så data från alla C99, C11, C++11, C++14 standarder ingår här. Det är möjligt att funktionen i vissa standarder fungerar annorlunda än materialet som presenteras i artikeln.

scanf C-funktion - beskrivning

scanf() är en funktion som finns i rubrikfilen för stdio.h(C) och cstdio(C++), den kallas också för formaterad indata till programmet. scanf läser tecken från standardinmatning (stdin) och konverterar dem enligt formatet och skriver dem sedan till de angivna variablerna. Format innebär att data, när de tas emot, reduceras till en viss form. Således beskrivs scanf C-funktionen:

scanf("%format", &variabel1[, &variabel2,[...]]),

där variabler skickas som adresser. Anledningen till att överföra variabler till en funktion på detta sätt är uppenbar: som ett resultat av dess funktion returnerar den ett värde som indikerar förekomsten av fel, så det enda sättet att ändra variablernas värden är att skicka med adress. Tack vare denna metod kan funktionen också bearbeta data av vilken typ som helst.

Vissa programmerare anropar funktioner som scanf() eller printf()-procedurer på grund av analogier med andra språk.

Scanf låter dig ange alla grundläggande språktyper: char, int, float, sträng, etc. När det gäller variabler av typen sträng, finns det inget behov av att ange adresstecknet - "&", eftersom en variabel av typen sträng är en array och dess namn är adressen till det första elementet i arrayen i datorns minne .

Datainmatningsformat eller kontrollsträng

Låt oss börja med att titta på ett exempel på användning av scanf C-funktionen från beskrivningen.

#omfatta int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //krav för linux-system )

Inmatningsformatet består av följande fyra parametrar: %[*][width][modifiers] typ. I det här fallet är "%"-tecknet och typen obligatoriska parametrar. Det vill säga, minimiformatet ser ut så här: "%s", "%d" och så vidare.

I allmänhet är tecknen som utgör en formatsträng indelade i:

  • formatspecifikationer - allt som börjar med symbolen %;
  • separerande tecken eller blanksteg - dessa är mellanslag, tabb (\t), ny rad (\n);
  • andra tecken än blanksteg.

Funktionen kan vara osäker.

Använd scanf_s() istället för scanf().

(upplagt av Visual Studio)

Typ- eller formatspecifikationer eller konverteringstecken eller kontrolltecken

Beskrivningen av scanf C måste åtminstone innehålla en formatspecifikation, som anges i slutet av uttryck som börjar med tecknet "%". Den talar om för programmet vilken typ av data som kan förväntas vid inmatning, vanligtvis från tangentbordet. En lista över alla formatspecifikationer finns i tabellen nedan.

Menande

Programmet väntar på att ett tecken ska matas in. Variabeln som ska skrivas måste vara av teckentyp char.

Programmet förväntar sig att ett heltals decimaltal anges. Variabeln måste vara av typen int.

Programmet förväntar sig ett flyttal i exponentiell form. Variabeln måste vara av typen float.

Programmet förväntar sig att ett flyttalsnummer anges. Variabeln måste vara av typen float.

7

Programmet förväntar sig att ett flyttalsnummer anges. Variabeln måste vara av typen float.

Programmet förväntar sig att ett oktalt nummer anges. Variabeln måste vara av typen int.

Programmet förväntar sig att en sträng matas in. En sträng anses vara en uppsättning av alla tecken upp till det första avgränsningstecknet som påträffas. Variabeln måste vara av typen string.

Programmet förväntar sig att ett hexadecimalt tal anges. Variabeln måste vara av typen int.

Variabeln förväntar sig en pekareinmatning. Variabeln måste vara en pekartyp.

Skriver ett heltalsvärde till en variabel lika med antalet tecken som hittills lästs av scanf-funktionen.

Programmet läser ett osignerat heltal. Variabeltypen måste vara heltal utan tecken.

Programmet förväntar sig att ett binärt tal anges. Variabeln måste vara av typen int.

En uppsättning skanningsbara tecken. Programmet väntar på inmatning av tecken från en begränsad pool specificerad mellan scanf och kommer att fungera så länge det finns tecken från den angivna uppsättningen på ingångsströmmen.

Tecken i formatsträngen

Asterisk (*)

Asterisken (*) är en flagga som indikerar att tilldelningsoperationen bör undertryckas. En asterisk placeras omedelbart efter "%"-tecknet. Till exempel,

Scanf("%d%*c%d", &x, &y); //ignorera tecknet mellan två heltal. scanf("%s%*d%s", str, str2); //ignorera heltal mellan två strängar.

Det vill säga, om du anger raden "45-20" i konsolen kommer programmet att göra följande:

  1. Variabeln "x" kommer att tilldelas värdet 45.
  2. Variabeln "y" kommer att tilldelas värdet 20.
  3. Och minustecknet (streck) "-" kommer att ignoreras tack vare "%*c".

Bredd (eller fältbredd)

Detta är ett heltal mellan "%"-tecknet och formatspecifikationen som anger det maximala antalet tecken som ska läsas under den aktuella läsoperationen.

Det finns några viktiga punkter att tänka på:

  1. scanf kommer att sluta köras om det stöter på ett avgränsningstecken, även om det inte har räknat 20 tecken.
  2. Om inmatningen innehåller mer än 20 tecken, kommer endast de första 20 av dem att skrivas till variabeln str.

Typmodifierare (eller precision)

Dessa är speciella flaggor som ändrar typen av data som förväntas för inmatning. Flaggan anges till vänster om typspecifikationen:

  • L eller l (litet L) När du använder "l" med specifikationerna d, i, o, u, x, talar flaggan om för programmet att förvänta sig inmatning av typen long int. När du använder "l" med e- eller f-specifikationen talar flaggan om för programmet att det bör förvänta sig att ett dubbelt värde anges. Att använda "L" talar om för programmet att ett värde av typen lång dubbel förväntas. Genom att använda "l" med specifikationerna "c" och "s" talar om för programmet att dubbelbytetecken av typen wchar_t förväntas. Till exempel "%lc", "%ls", "%l".
  • h är en flagga som indikerar typen kort.
  • hh - indikerar att variabeln är en pekare till ett värde av typen signed char eller unsigned char. Flaggan kan användas med specifikationerna d, i, o, u, x, n.
  • ll (två små L) - indikerar att variabeln är en pekare till ett värde av typen signed int eller unsigned long long int. Flaggan används med specifikationerna: d, i, o, u, x, n.
  • j - anger att variabeln är en pekare för att skriva intmax_t eller uintmax_t från rubrikfilen stdint.h. Används med specifikationer: d, i, o, u, x, n.
  • z - anger att variabeln är en pekare till typen size_t, vars definition finns i stddef.h. Används med specifikationer: d, i, o, u, x, n.
  • t - anger att variabeln är en pekare för att skriva ptrdiff_t. Definitionen för denna typ finns i stddef.h. Används med specifikationer: d, i, o, u, x, n.

Bilden med modifierare kan presenteras tydligare i form av en tabell. Denna beskrivning av scanf C kommer att vara tydligare för programmerare.

Andra karaktärer

Alla tecken som påträffas i formatet kommer att kasseras. Det är värt att notera att närvaron av blanksteg eller avgränsande tecken (nyrad, blanksteg, tab) i kontrollsträngen kan leda till olika beteende hos funktionen. I en version kommer scanf() att läsa utan att spara något antal avgränsare tills den stöter på ett annat tecken än avgränsaren, och i en annan version spelar mellanslag (endast de) ingen roll och uttrycket "%d + %d" är ekvivalent till "% d+%d".

Exempel

Låt oss titta på ett antal exempel för att hjälpa dig att tänka på och mer exakt förstå hur funktionen fungerar.

Scanf("%3s", str); //om du anger raden “1d2s3d1;3” i konsolen kommer endast “1d2” att skrivas till str scanf("%dminus%d", &x, &y); //minus tecken mellan två siffror kommer att kasseras scanf("%5", str); //tecken kommer att matas in i str tills det finns 5 av dem och tecknen är siffror från 0 till 9. scanf("%lf", &d); //förväntad indata av typen double scanf("%hd", &x); //förvänta sig ett antal av typen short scanf("%hu", &y); //förvänta sig ett antal av typen osignerad kort scanf("lx", &z); //förväntat antal typ lång int

Från exemplen som ges kan du se hur det förväntade antalet ändras med olika symboler.

scanf C - beskrivning för nybörjare

Det här avsnittet kommer att vara användbart för nybörjare. Ofta behöver du inte ha en fullständig beskrivning av scanf C till hands, utan snarare detaljerna om hur funktionen fungerar.

  • Funktionen är något föråldrad. Det finns flera olika implementeringar i bibliotek av olika versioner. Till exempel den förbättrade scanf S C-funktionen, en beskrivning av den finns på Microsofts webbplats.
  • Antalet specifikationer i formatet måste motsvara antalet argument som skickas till funktionen.
  • Element i inmatningsströmmen får endast separeras med avgränsande tecken: mellanslag, tabb, nyrad. Komma, semikolon, punkt, etc. - dessa tecken är inte avgränsare för scanf()-funktionen.
  • Om scanf stöter på ett avgränsningstecken kommer inmatningen att stoppas. Om det finns mer än en variabel att läsa, kommer scanf att gå vidare till att läsa nästa variabel.
  • Minsta avvikelse i formatet på indata leder till oförutsägbara resultat från programmet. Det är bra om programmet bara avslutas med ett fel. Men ofta fortsätter programmet att fungera och gör det felaktigt.
  • scanf("%20s ...", ...); Om indataströmmen överstiger 20 tecken, kommer scanf att läsa de första 20 tecknen och antingen avslutas eller gå vidare för att läsa nästa variabel, om det anges. Nästa scanf-anrop fortsätter att läsa indataströmmen där det föregående scanf-anropet slutade. Om ett avgränsningstecken påträffas när de första 20 tecknen läses, kommer scanf att sluta fungera eller gå vidare till att läsa nästa variabel, även om den inte läste 20 tecken för den första variabeln. I det här fallet kommer alla oräknade tecken att kopplas till nästa variabel.
  • Om uppsättningen tecken som ska skannas börjar med "^"-tecknet, kommer scanf att läsa data tills den stöter på ett avgränsningstecken eller ett tecken från uppsättningen. Till exempel kommer "%[^A-E1-5]" att läsa data från strömmen tills ett av de engelska versalerna A till E eller ett av siffrorna 1 till 5 påträffas.
  • Funktionen scanf C, som beskrivs, returnerar ett tal som är lika med det framgångsrika antalet inmatningar i variabler. Om scanf skriver 3 variabler, så kommer resultatet av den framgångsrika operationen av funktionen att vara returen av talet 3. Om scanf inte kunde skriva några variabler, blir resultatet 0. Och slutligen, om scanf inte kunde börja arbeta kl. allt av någon anledning blir resultatet EOF .
  • Om scanf()-funktionen inte slutförde sitt arbete korrekt. Till exempel, scanf("%d", &x) - ett nummer förväntades, men symboler togs emot som indata. Nästa scanf()-anrop börjar från den punkt i inmatningsströmmen där det föregående funktionsanropet slutade. För att övervinna detta problem måste du bli av med de problematiska karaktärerna. Detta kan till exempel göras genom att anropa scanf("%*s"). Det vill säga, funktionen kommer att läsa en sträng av tecken och kasta bort den. På det här smarta sättet kan du fortsätta att mata in nödvändiga uppgifter.
  • Vissa implementeringar av scanf() tillåter inte användningen av "-" i teckenuppsättningen som ska skannas.
  • Specifieraren "%c" läser varje tecken från strömmen. Det vill säga, den läser också avgränsningstecknet. För att hoppa över avgränsningstecknet och fortsätta läsa det önskade tecknet, kan du använda "%1s".
  • När du använder "c"-specifikationen är det acceptabelt att använda bredden "%10c", men då måste du skicka en array av element av typen char som en variabel till scanf-funktionen.
  • "%" betyder "alla små bokstäver i det engelska alfabetet", och "%" betyder helt enkelt 3 tecken: 'z', 'a', '-'. Med andra ord betyder "-"-tecknet bara ett intervall om det förekommer mellan två tecken som är i rätt ordning. Om "-" är i slutet av ett uttryck, i början eller i fel ordning av tecken på vardera sidan av det, representerar det helt enkelt ett bindestreck, inte ett intervall.

Slutsats

Detta avslutar beskrivningen av scanf C. Det är en bra bekvämlighetsfunktion för att arbeta i små program och när man använder en procedurmetod för programmering. Den största nackdelen är dock antalet oförutsägbara fel som kan uppstå när du använder scanf. Därför är det bäst att hålla beskrivningen av scanf C framför ögonen när du programmerar. I stora professionella projekt används iostreams på grund av att de har kapacitet på högre nivå, bättre kan fånga upp och bearbeta fel och även arbeta med betydande mängder information. Det bör också noteras att en beskrivning av scanf C på ryska finns tillgänglig på många onlinekällor, såväl som exempel på dess användning, på grund av funktionens ålder. Därför kan du vid behov alltid hitta svaret på tematiska forum.

C/C++ Standard Library innehåller ett antal funktioner för att läsa och skriva till konsolen (tangentbord och monitor). Dessa funktioner läser och skriver data som en enkel ström av tecken.

Begreppet ström, som används i programmering, är nära besläktat med den vanliga, vardagliga förståelsen av detta ord. Ingångsströmmen kan jämföras med ett rör genom vilket vatten (information) kommer in i en pool (datorminne), och utströmmen kan jämföras med ett rör genom vilket vatten lämnar poolen. En viktig egenskap hos detta rör är att data bara kan röra sig i en riktning åt gången. Även om samma rör används för inmatning och utmatning kan detta inte ske samtidigt: för att byta flödesriktning måste den stoppas, någon åtgärd måste utföras, och först då kan flödet riktas i motsatt riktning. En annan egenskap hos bäcken är att den nästan aldrig blir torr. Ibland torkar det ut, men denna period kan inte vara lång om systemet fungerar normalt.

Standardutgångsfunktionen printf()

Printf()-funktionen är en standardutdatafunktion. Med den här funktionen kan du visa en teckensträng, ett nummer, värdet på en variabel på skärmen...

Funktionen printf() har en prototyp i stdio.h
int printf(char *kontrollsträng, ...);

Om det lyckas returnerar printf() antalet utskrivna tecken.

Kontrollraden innehåller två typer av information: tecken som skrivs ut direkt på skärmen och formatspecifikationer som anger hur argumenten skrivs ut.

Printf()-funktionen är en formaterad utdatafunktion. Detta innebär att i funktionsparametrarna är det nödvändigt att ange formatet för de data som ska matas ut. Dataformatet specificeras av formatspecifikationer. Formatspecifikationen börjar med ett %-tecken följt av en formatkod.

Formatspecifikationer:

%Med symbol
%d heltals decimaltal
%i heltals decimaltal
%e decimaltal i formen x.xx e+xx
%E decimaltal i formen x.xx E+xx
%f
%F decimal flyttal nummer xx.xxxx
%g %f eller %e, beroende på vilket som är kortast
%G %F eller %E, beroende på vilket som är kortast
%o oktalt tal
%s teckensträng
%u osignerat decimaltal
%x hexadecimalt tal
%X hexadecimalt tal
%% symbol %
%p pekare
%n pekare

Dessutom kan l- och h-modifierare användas för formatkommandon.

%ld tryck lång int
%hu stämpelkort osignerad
%Lf lång dubbelstämpel

I formatspecifikationen, efter %-symbolen, kan precisionen (antal siffror efter decimalkomma) anges. Precisionen ställs in enligt följande: %.n<код формата>. Där n är antalet siffror efter decimalkomma, och<код формата>- en av koderna ovan.

Till exempel, om vi har en variabel x=10,3563 av flyttyp och vi vill visa dess värde exakt med 3 decimaler, så ska vi skriva:

printf("Variabel x = %.3f",x);

Resultat:
Variabel x = 10,356

Du kan också ange den minsta bredden på fältet som tilldelats för utskrift. Om raden eller numret är större än den angivna fältbredden skrivs raden eller numret ut i sin helhet.

Om du till exempel skriver:

printf("%5d",20);

då blir resultatet som följer:
20

Observera att siffran 20 inte skrevs ut från början av raden. Om du vill att de oanvända utrymmena i fältet ska fyllas med nollor, måste du sätta en 0-symbol framför fältets bredd.

Till exempel:

printf("%05d",20);

Resultat:
00020

Förutom dataformatspecifikation kan kontrollraden innehålla kontrolltecken:

\b BS, botten
\f Ny sida, sidbyte
\n Ny linje, linjematning
\r Vagnretur
\t Horisontell tabulering
\v Vertikal flik
\" Dubbelt citat
\" Apostrof
\\ Omvänt snedstreck
\0 Nolltecken, nollbyte
\a Signal
\N Oktal konstant
\xN Hexadecimal konstant
\? Frågetecken

Oftast använder du tecknet \n. Med detta kontrolltecken kan du gå till en ny rad. Titta på exempelprogrammen så förstår du allt.

Exempel på program.

/* Exempel 1 */
#omfatta

void main(void)
{
int a,b,c; // Deklaration av variabler a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Resultatet av programmet:
a=5, b=6, c=9

/* Exempel 2 */
#omfatta

void main(void)
{
flyta x,y,z;

X=10,5;
y=130,67;
z=54;

Printf("Objektkoordinater: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Resultatet av programmet:
Objektkoordinater: x:10,50, y:130,67, z:54,00

/* Exempel 3 */
#omfatta

void main()
{
int x;

X=5;
printf("x=%d", x*2);
}

Resultatet av programmet:
x=10

/* Exempel 4 */
#omfatta

void main(void)
{
printf("\"Text inom citattecken\"");
printf("\nSyrehalt: 100%%");
}

Resultatet av programmet:
"Text inom citattecken"
Syrehalt: 100%

/* Exempel 5 */
#omfatta

void main(void)
{
int a;

A=11; // 11 i decimal är lika med b i hexadecimal
printf("a-dec=%d, a-hex=%X",a,a);
}

Resultatet av programmet:
a-dec=11, a-hex=b

/* Exempel 6 */
#omfatta

void main(void)
{
char ch1,ch2,ch3;

Ch1="A";
ch2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

Resultatet av programmet:
ABC

/* Exempel 7 */
#omfatta

void main(void)
{
char *str="Min sträng.";

Printf("Detta är %s",str);
}

Resultatet av programmet:
Det här är min linje.

/* Exempel 8 */
#omfatta

void main(void)
{
printf("Hej!\n"); // Efter utskrift kommer det att ske en övergång till en ny rad - \n
printf("Jag heter Pavel."); // Detta kommer att skrivas ut på en ny rad
}

Resultatet av programmet:
Hallå!
Jag heter Pavel.

Standardinmatningsfunktionen scanf()

Funktionen scanf() är en formaterad indatafunktion. Med dess hjälp kan du mata in data från en standardinmatningsenhet (tangentbord). Indata kan vara heltal, flyttal, tecken, strängar och pekare.

Funktionen scanf() har följande prototyp i stdio.h:
int scanf(char *kontrollsträng);

Funktionen returnerar antalet variabler som har tilldelats ett värde.

Kontrollsträngen innehåller tre typer av tecken: formatspecifikationer, mellanslag och andra tecken. Formatspecifikationer börjar med tecknet %.

Formatspecifikationer:

När du anger en sträng med funktionen scanf() (%s formatspecifikation), skrivs strängen in före det första blanksteg!! de där. om du skriver in strängen "Hej värld!" använder scanf() funktion


scanf("%s",str);

sedan kommer den resulterande strängen, som kommer att lagras i str-arrayen, att bestå av ett ord "Hej". FUNKTIONEN GÅR IN I EN STRÄNG INNAN DEN FÖRSTA UTRYMMEN! Om du vill skriva in strängar med mellanslag, använd då funktionen

char *gets(char *buf);

Med funktionen gets() kan du ange hela strängar. Gets()-funktionen läser tecken från tangentbordet tills nyradstecknet (\n) visas. Själva nyradstecknet visas när du trycker på enter. Funktionen returnerar en pekare till buf. buf - buffert (minne) för inmatningssträngen.

Även om gets() inte är ämnet för den här artikeln, låt oss skriva ett exempelprogram som låter dig ange en hel rad från tangentbordet och visa den på skärmen.

#omfatta

void main(void)
{
kolbuffert; // array (buffert) för indatasträngen

Gets(buffert); // skriv in en rad och tryck enter
printf("%s",buffert); // mata ut den angivna strängen till skärmen
}

Ännu en viktig anmärkning! För att mata in data med funktionen scanf() måste den skicka variabeladresser som parametrar, inte variablerna själva. För att få adressen till en variabel måste du föregå variabelnamnet med en & (ampersand). Tecknet & betyder att du tar adressen.

Vad betyder adress? Jag ska försöka förklara. I programmet har vi en variabel. En variabel lagrar sitt värde i datorns minne. Så det här är adressen som vi får med & är adressen i datorns minne där variabelns värde lagras.

Låt oss titta på ett exempelprogram som visar oss hur man använder &

#omfatta

void main(void)
{
int x;

Printf("Ange variabel x:");
scanf("%d",&x);
printf("Variabel x=%d",x);
}

Låt oss nu återgå till kontrollraden för scanf()-funktionen. Igen:

int scanf(char *kontrollsträng);

Mellanslagstecknet på kontrollsträngen beordrar ett eller flera mellanslag att hoppa över i inmatningsflödet. Förutom utrymmet kan en tabb eller nyradstecken uppfattas. Ett icke-null tecken indikerar att tecknet läses och kasseras.

Avgränsarna mellan de två siffrorna du anger är mellanslag, tabb eller nyrad. * efter % och före formatkoden (formatspecifikation) beordrar datatypen som ska läsas, men inte tilldelas det värdet.

Till exempel:

scanf("%d%*c%d",&i,&j);

Om du anger 50+20 ställs variabel i till 50, variabel j till 20, och tecknet + kommer att läsas och ignoreras.

Formatkommandot kan ange den största fältbredden som ska läsas.

Till exempel:

scanf("%5s",str);

indikerar behovet av att läsa de första 5 tecknen från inmatningsströmmen. Om du anger 1234567890ABC kommer str-matrisen bara att innehålla 12345, de återstående tecknen kommer att ignoreras. Separatorer: mellanslag, tab och nyrad - när du anger en symbol behandlas de som alla andra tecken.

Om några andra tecken förekommer i kontrollsträngen är de avsedda att identifiera och hoppa över motsvarande tecken. Character stream 10plus20-operatör

scanf("%dplus%d",&x,&y);

kommer att tilldela värdet 10 till variabeln x, värdet 20 till variabeln y, och hoppar över plustecknen eftersom de förekommer i kontrollsträngen.

En av de kraftfulla funktionerna i scanf()-funktionen är dess förmåga att specificera en skanningsuppsättning. Sökuppsättningen definierar uppsättningen tecken som tecknen som läses av scanf()-funktionen kommer att jämföras med. Funktionen scanf() läser tecken så länge de visas i sökuppsättningen. Så snart det inmatade tecknet inte hittas i sökuppsättningen, flyttar scanf()-funktionen till nästa formatspecifikator. Sökuppsättningen definieras av en lista med tecken inom hakparenteser. %-tecknet placeras före öppningsparentesen. Låt oss titta på detta med ett exempel.

#omfatta

void main(void)
{
char strl, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Låt oss ange en uppsättning tecken:
12345abcdefg456

Programmet kommer att visa på skärmen:
12345
abcdefg456

När du anger en sökuppsättning kan du också använda bindestrecket för att ange avstånd, såväl som den maximala bredden på inmatningsfältet.

scanf("%10", str1);

Du kan också definiera tecken som inte ingår i sökuppsättningen. Det första av dessa tecken föregås av ett ^. Många tecken skiljer på gemener och stora bokstäver.

Låt mig påminna dig om att när du använder funktionen scanf() måste du skicka variabla adresser till den som parametrar. Koden ovan skrevs:

char str; // matris med 80 tecken
scanf("%s",str);

Observera att str inte föregås av &. Detta görs eftersom str är en array och arraynamnet - str är en pekare till det första elementet i arrayen. Därför bör &-tecknet inte användas. Vi skickar redan adressen till scanf()-funktionen. Tja, enkelt uttryckt är str adressen i datorns minne där värdet för det första elementet i arrayen kommer att lagras.

Exempel på program.

Exempel 1.
Det här programmet visar förfrågan "Hur gammal är du?:" och väntar på datainmatning. Om du till exempel anger siffran 20 kommer programmet att visa raden "Du är 20 år". När vi anropar scanf()-funktionen sätter vi ett &-tecken framför åldersvariabeln, eftersom scanf()-funktionen behöver variabeladresser. Funktionen scanf() kommer att skriva det angivna värdet till den angivna adressen. I vårt fall kommer det inmatade värdet 20 att skrivas till adressen för åldersvariabeln.

/* Exempel 1 */

#omfatta

void main(void)
{
int ålder;

Printf("\nHur gammal är du?:");
scanf("%d",&ålder);
printf("Du är %d år gammal.", ålder);
}

Exempel 2.
Kalkylatorprogram. Denna kalkylator kan bara lägga till siffror. När du anger 100+34 kommer programmet att ge resultatet: 100+34=134.

/* Exempel 2 */

#omfatta

void main(void)
{
int x, y;

Printf("\nKalkylator:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Exempel 3.
Det här exemplet visar hur du ställer in läsfältets bredd. I vårt exempel är fältets bredd fem tecken. Om du anger en sträng med ett stort antal tecken, kommer alla tecken efter den 5:e att kasseras. Lägg märke till funktionsanropet scanf(). Tecknet & föregår inte arraynamnet eftersom arraynamnet är adressen till det första elementet i arrayen.

/* Exempel 3 */

#omfatta

void main(void)
{
karaktärsnamn;

Printf("\nAnge ditt användarnamn (högst 5 tecken):");
scanf("%5s", namn);
printf("\nDu skrev in %s", namn);
}

Exempel 4.
Det sista exemplet i den här artikeln visar hur en sökuppsättning kan användas. När du har startat programmet anger du ett nummer från 2 till 5.

/* Exempel 4 */

#omfatta

void main(void)
{
röding bal;

Printf("Ditt betyg är 2,3,4,5:");
scanf("%", &bal);
printf("\nBetyg %c", bal);
}

Dessa handledningar är för alla, oavsett om du är ny på programmering eller har lång erfarenhet av programmering på andra språk! Det här materialet är för dem som vill lära sig C/C++-språken från dess allra grundläggande till de mest komplexa strukturerna.

C++ är ett programmeringsspråk, kunskap om detta programmeringsspråk gör att du kan styra din dator på högsta nivå. Helst kommer du att kunna få datorn att göra vad du vill. Vår sida hjälper dig att behärska programmeringsspråket C++.

Installation /IDE

Det allra första du bör göra innan du börjar lära dig C++ är att se till att du har en IDE – en integrerad utvecklingsmiljö (programmet som du ska programmera i). Om du inte har en IDE, så är det här. När du bestämt dig för valet av IDE, installera den och öva på att skapa enkla projekt.

Introduktion till C++

C++-språket är en uppsättning kommandon som talar om för datorn vad den ska göra. Denna uppsättning kommandon kallas vanligtvis källkod eller helt enkelt kod. Kommandon är antingen "funktioner" eller "sökord". Nyckelord (C/C++ reserverade ord) är de grundläggande byggstenarna i språket. Funktioner är komplexa byggstenar eftersom de är skrivna i termer av enklare funktioner – det ser du i vårt allra första program, som visas nedan. Denna struktur av funktioner liknar innehållet i en bok. Innehållet kan visa bokens kapitel, varje kapitel i boken kan ha sitt eget innehåll bestående av stycken, varje stycke kan ha sina egna understycken. Även om C++ tillhandahåller många vanliga funktioner och reserverade ord som du kan använda, finns det fortfarande ett behov av att skriva dina egna funktioner.

Vilken del av programmet börjar det på? Varje program i C++ har en funktion, den kallas huvud- eller huvudfunktionen, programexekveringen börjar med denna funktion. Från huvudfunktionen kan du även anropa vilka andra funktioner som helst, oavsett om de är sådana vi skrev eller, som tidigare nämnts, tillhandahållna av kompilatorn.

Så hur får du tillgång till dessa standardfunktioner? För att komma åt standardfunktionerna som följer med kompilatorn måste du inkludera rubrikfilen med förbehandlardirektivet - #include . Varför är detta effektivt? Låt oss titta på ett exempel på ett fungerande program:

#omfatta << "Моя первая программа на С++\n"; cin.get(); }

Låt oss i detalj överväga delarna i programmet. #include är ett "preprocessor"-direktiv som säger åt kompilatorn att lägga koden från iostream-huvudfilen i vårt program innan den körbara filen skapas. Genom att koppla en header-fil till ett program får du tillgång till många olika funktioner som du kan använda i ditt program. Till exempel kräver cout-operatören iostream . Rad med namnutrymme std; säger åt kompilatorn att använda en grupp funktioner som är en del av standardbiblioteket std. Denna linje låter programmet också använda operatörer som cout. Semikolonet är en del av C++-syntaxen. Det talar om för kompilatorn att detta är slutet på kommandot. Du kommer att se om ett ögonblick att semikolon används för att avsluta de flesta kommandon i C++.

Nästa viktiga rad i programmet är int main(). Den här raden talar om för kompilatorn att det finns en funktion som heter main och att funktionen returnerar ett heltal. Lockiga hängslen ( och ) signalerar början (och slutet) av en funktion. Lockiga hängslen används också i andra kodblock, men de indikerar alltid en sak - början respektive slutet av blocket.

I C++ används cout-objektet för att visa text (uttalas "C out"). Han använder symboler<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Nästa kommando är cin.get() . Detta är ett annat funktionsanrop som läser data från indataströmmen och väntar på att ENTER-tangenten ska tryckas ned. Detta kommando hindrar konsolfönstret från att stängas tills ENTER-tangenten trycks ned. Detta ger dig tid att se resultatet av programmet.

När vi når slutet av huvudfunktionen (den avslutande krulliga stag), kommer vårt program att returnera värdet 0 till operativsystemet. Detta returvärde är viktigt eftersom operativsystemet genom att analysera det kan bedöma om vårt program slutfördes framgångsrikt eller inte. Ett returvärde på 0 betyder framgång och returneras automatiskt (men bara för int-datatypen; andra funktioner kräver att du manuellt returnerar värdet), men om vi ville returnera något annat, till exempel 1, måste vi göra det manuellt.

#omfatta använder namnutrymme std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

För att konsolidera materialet, skriv in programkoden i din IDE och kör den. När programmet har körts och du har sett resultatet, experimentera lite med cout-satsen. Detta hjälper dig att vänja dig vid språket.

Var noga med att kommentera dina program!

Lägg till kommentarer till din kod för att göra det tydligare inte bara för dig själv utan även för andra. Kompilatorn ignorerar kommentarer när kod körs, vilket gör att du kan använda valfritt antal kommentarer för att beskriva den faktiska koden. För att skapa en kommentar, använd eller // , som talar om för kompilatorn att resten av raden är en kommentar, eller /* och sedan */ . När du lär dig programmera är det användbart att kunna kommentera delar av koden för att se hur programmets utdata förändras. Du kan läsa i detalj om kommentarstekniken.

Vad ska man göra med alla dessa typer av variabler?

Ibland kan det vara förvirrande att ha flera variabeltyper när vissa variabeltyper verkar vara överflödiga. Det är mycket viktigt att använda rätt variabeltyp, eftersom vissa variabler kräver mer minne än andra. Dessutom, på grund av hur de lagras i minnet, flyttalsnummer, flytande- och dubbeldatatyperna är "oprecisa" och bör inte användas när ett exakt heltalsvärde behöver lagras.

Deklarera variabler i C++

För att deklarera en variabel, använd syntaxtypen<имя>; . Här är några exempel på variabeldeklarationer:

Int num; röding karaktär; float num_float;

Det är tillåtet att deklarera flera variabler av samma typ på en rad, för att göra detta måste var och en av dem separeras med ett kommatecken.

Int x, y, z, d;

Om du har tittat noga kan du ha sett att en variabeldeklaration alltid följs av ett semikolon. Du kan lära dig mer om konventionen "om namngivning av variabler".

Vanliga misstag när man deklarerar variabler i C++

Om du försöker använda en variabel som inte är deklarerad kommer ditt program inte att kompilera och du får ett felmeddelande. I C++ är alla språknyckelord, alla funktioner och alla variabler skiftlägeskänsliga.

Använda variabler

Så nu vet du hur man deklarerar en variabel. Här är ett exempelprogram som visar användningen av en variabel:

#omfatta använder namnutrymme std; int main() ( int nummer; cout<< "Введите число: "; cin >>nummer; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Låt oss ta en titt på det här programmet och undersöka dess kod rad för rad. Nyckelordet int anger att talet är ett heltal. Funktionen cin >> läser in värdet i nummer, användaren måste trycka på enter efter det angivna numret. cin.ignore() är en funktion som läser ett tecken och ignorerar det. Vi har organiserat vår inmatning i programmet, efter att ha angett ett nummer trycker vi på ENTER-tangenten, en symbol som också sänds till inmatningsströmmen. Vi behöver det inte, så vi kasserar det. Tänk på att variabeln deklarerades som en heltalstyp, om användaren försöker ange ett decimaltal kommer det att trunkeras (det vill säga att decimaldelen av talet ignoreras). Försök att ange ett decimaltal eller en sekvens av tecken, när du kör exempelprogrammet beror svaret på inmatningsvärdet.

Observera att vid utskrift från en variabel används inga citat. Frånvaron av citattecken talar om för kompilatorn att det finns en variabel, och därför bör programmet kontrollera värdet på variabeln för att ersätta variabelnamnet med dess värde vid körning. Flera skiftsatser på samma rad är helt acceptabla och utmatningen kommer att göras i samma ordning. Du bör separera strängliteraler (strängar omslutna av citattecken) och variabler, vilket ger var och en sin egen skiftoperator<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Ändra och jämföra värden

Naturligtvis, oavsett vilken typ av data du använder, är variabler inte särskilt intressanta utan möjligheten att ändra sitt värde. Följande visar några operatorer som används i kombination med variabler:

  • * multiplikation,
  • - subtraktion,
  • + tillägg,
  • / division,
  • = uppdrag,
  • == jämställdhet,
  • > mer
  • < меньше.
  • != ojämlika
  • >= större än eller lika med
  • <= меньше или равно

Operatorer som utför matematiska funktioner måste användas till höger om tilldelningstecknet för att resultatet ska kunna tilldelas variabeln till vänster.

Här är några exempel:

A = 4*6; // använd radkommentar och semikolon, a är lika med 24 a = a + 5; // lika med summan av det ursprungliga värdet och fem a == 5 // tilldelar inte fem, kontrollerar om det är lika med 5 eller inte

Du använder ofta == i konstruktioner som villkorliga uttalanden och loopar.

A< 5 // Проверка, a менее пяти? a >5 // Kontrollera, är en mer än fem? a == 5 // Kontrollerar, är a lika med fem? a != 5 // Kontrollera, är det inte lika med fem? a >= 5 // Kontrollera om a är större än eller lika med fem? a<= 5 // Проверка, a меньше или равно пяти?

Dessa exempel visar inte användningen av jämförelsetecken särskilt tydligt, men när vi börjar studera urvalsoperatorer kommer du att förstå varför detta är nödvändigt.

1. Introduktion

Programmering kräver nya universella algoritmiska modeller, och hårdvara implementerar algoritmer inte bara i en annan form, utan också på basis av en annan algoritmisk modell - automater. Att låna teknik från hårdvaruutveckling är nyckeltanken bakom automatiserad programmering. Syntes av digitala enheter skiljer sig dock från programmering. Men när man lånar en modell är det å ena sidan inte tillrådligt att ändra den nämnvärt, och å andra sidan kan man inte bortse från den redan existerande teorin och praktiken för programmering.

Därefter kommer vi att titta på SWITCH-tekniken för att designa automatprogram, där du stöter på liknande processer hela tiden. Å ena sidan förändrade den finita tillståndsmaskinmodellen så mycket att den faktiskt tog den utanför automatteorin. Och å andra sidan introducerar den begrepp i programmering som är svåra för programmerare att uppfatta, och ibland helt enkelt är överflödiga, eftersom det finns mer bekanta analoger från programteori och programmeringspraktik.

Som underlag för att diskutera problemen med automatisk programmering kommer vi att ta den nyligen genomförda föreläsningen av Shalyto A.A. och hans "programmerings"-artiklar mot definitionen av det automatiska programmeringsparadigmet.

Lär dig grunderna och krångligheterna i programmeringsspråket C++. En lärobok med praktiska uppgifter och prov. Vill du lära dig programmera? Då är du på rätt plats – här finns gratis programmeringsutbildning. Oavsett om du är erfaren eller inte, kommer dessa programmeringslektioner att hjälpa dig att komma igång med att skapa, kompilera och felsöka C++-program i en mängd olika utvecklingsmiljöer: Visual Studio, Code::Blocks, Xcode eller Eclipse.

Många exempel och detaljerade förklaringar. Perfekt för både nybörjare (dummies) och mer avancerade. Allt förklaras från grunden till detaljerna. Dessa lektioner (200+) kommer att ge dig en bra bas/grund i att förstå programmering inte bara i C++, utan även i andra programmeringsspråk. Och det är helt gratis!

Dessutom omfattas steg-för-steg-skapandet av ett spel i C++, SFML-grafikbiblioteket och mer än 50 uppgifter för att testa dina färdigheter och kunskaper i C++. En extra bonus är.

För att du har skrivit om +20 till karma och min tacksamhet!

Kapitel nr 0. Introduktion. Början av arbetet

Kapitel nr 1. Grunderna i C++

Kapitel nr 2. Variabler och grundläggande datatyper i C++

Kapitel nr 3. Operatörer i C++

Kapitel nr 4. Omfattning och andra typer av variabler i C++

Kapitel nr 5. Ordningen i vilken koden exekveras i ett program. Slingor och grenar i C++



 


Läsa:



Betyg av de bästa trådlösa hörlurarna

Betyg av de bästa trådlösa hörlurarna

Är det möjligt att köpa universella öron billigt? 3 000 rubel - är det möjligt att köpa högkvalitativa hörlurar för den typen av pengar? Som det visade sig, ja. Och tal...

Huvudkameran på en mobil enhet är vanligtvis placerad på baksidan av kroppen och används för att ta foton och filma

Huvudkameran på en mobil enhet är vanligtvis placerad på baksidan av kroppen och används för att ta foton och filma

En uppdaterad version av surfplattan med förbättrade egenskaper och hög autonomi. Acers smartphones besöks sällan...

Så här byter du till en annan operatör samtidigt som du behåller ditt nummer

Så här byter du till en annan operatör samtidigt som du behåller ditt nummer

Lagen om att bevara ett telefonnummer när en abonnent byter till en annan mobiloperatör trädde i kraft i Ryssland den 1 december. Det visade sig dock att...

recension av en phablet, dyr, men mycket kompetent

recension av en phablet, dyr, men mycket kompetent

Recension av en phablet, dyr, men mycket kompetent 2015-03-20 Jag är den enda skomakaren i världen utan stövlar, en smartphone-recensent utan min egen smartphone....

feed-bild RSS