namai - Programinė įranga
Scanf C funkcija: aprašymas. Įvesta programavimo kalba Ką daryti su visais šiais kintamųjų tipais

Šiame straipsnyje funkcija scanf() aptariama bendrai, nenurodant konkretaus standarto, todėl čia pateikiami bet kurių C99, C11, C++11, C++14 standartų duomenys. Gali būti, kad kai kuriuose standartuose funkcija veikia kitaip nei straipsnyje pateikta medžiaga.

scanf C funkcija - aprašymas

scanf() yra funkcija, esanti stdio.h(C) ir cstdio(C++) antraštės faile, ji taip pat vadinama formatuotu programos įvestimi. scanf nuskaito simbolius iš standartinės įvesties (stdin) ir konvertuoja juos pagal formatą, tada įrašo į nurodytus kintamuosius. Formatas reiškia, kad gaunami duomenys sumažinami iki tam tikros formos. Taigi, Scanf C funkcija aprašyta:

scanf ("% formatas", &kintamasis1[, &kintamasis2,[…]]),

kur kintamieji perduodami kaip adresai. Priežastis, kodėl kintamieji perduodami funkcijai tokiu būdu, yra akivaizdi: dėl savo veikimo ji grąžina reikšmę, nurodantį klaidų buvimą, todėl vienintelis būdas pakeisti kintamųjų reikšmes yra perduoti pagal adresą. Be to, šio metodo dėka funkcija gali apdoroti bet kokio tipo duomenis.

Kai kurie programuotojai iškviečia tokias funkcijas kaip scanf() arba printf() procedūras dėl analogijų su kitomis kalbomis.

„Scanf“ leidžia įvesti visus pagrindinius kalbų tipus: char, int, float, string ir kt. Jei kintamieji yra tipo eilutės, nereikia nurodyti adreso ženklo - „&“, nes eilutės tipo kintamasis yra masyvas, o jo pavadinimas yra pirmojo masyvo elemento adresas kompiuterio atmintyje.

Duomenų įvesties formatas arba valdymo eilutė

Pradėkime nuo aprašymo funkcijos scanf C naudojimo pavyzdžio.

#įtraukti int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //reikalavimas linux sistemoms )

Įvesties formatas susideda iš šių keturių parametrų: %[*][width][modifiers] tipas. Šiuo atveju „%“ ženklas ir tipas yra būtini parametrai. Tai yra, minimalus formatas atrodo taip: „%s“, „%d“ ir pan.

Paprastai simboliai, sudarantys formato eilutę, skirstomi į:

  • formato specifikacijos – viskas, kas prasideda simboliu %;
  • skiriamieji arba tarpo simboliai – tai tarpas, tabuliatorius (\t), nauja eilutė (\n);
  • simboliai, išskyrus tarpą.

Funkcija gali būti nesaugi.

Naudokite scanf_s() vietoj scanf().

(paskelbė Visual Studio)

Tipo arba formato specifikacijos, konvertavimo simboliai arba valdymo simboliai

Scanf C aprašyme turi būti bent formato specifikatorius, kuris nurodomas posakių, prasidedančių „%“ ženklu, pabaigoje. Jis nurodo programai, kokio tipo duomenis reikia tikėtis įvedus, dažniausiai iš klaviatūros. Visų formatų specifikacijų sąrašas pateiktas toliau esančioje lentelėje.

Reikšmė

Programa laukia, kol bus įvestas simbolis. Rašomas kintamasis turi būti simbolio tipo char.

Programa tikisi, kad bus įvestas sveikasis dešimtainis skaičius. Kintamasis turi būti int tipo.

Programa tikisi slankaus kablelio skaičiaus eksponentinės formos. Kintamasis turi būti float tipo.

Programa tikisi, kad bus įvestas slankaus kablelio skaičius. Kintamasis turi būti float tipo.

7

Programa tikisi, kad bus įvestas slankaus kablelio skaičius. Kintamasis turi būti float tipo.

Programa tikisi, kad bus įvestas aštuntainis skaičius. Kintamasis turi būti int tipo.

Programa tikisi, kad bus įvesta eilutė. Eilutė yra laikoma bet kokių simbolių rinkiniu iki pirmojo skiriamojo simbolio. Kintamasis turi būti eilutės tipo.

Programa tikisi, kad bus įvestas šešioliktainis skaičius. Kintamasis turi būti int tipo.

Kintamasis tikisi rodyklės įvesties. Kintamasis turi būti rodyklės tipo.

Į kintamąjį įrašo sveikojo skaičiaus reikšmę, lygią iki šiol funkcijos scanf nuskaitytų simbolių skaičiui.

Programa nuskaito sveikąjį skaičių be ženklo. Kintamojo tipas turi būti sveikasis skaičius be ženklų.

Programa tikisi, kad bus įvestas dvejetainis skaičius. Kintamasis turi būti int tipo.

Nuskaitomų simbolių rinkinys. Programa laukia, kol bus įvesti simboliai iš riboto telkinio, nurodyto tarp scanf, ir veiks tol, kol įvesties sraute bus simbolių iš nurodyto rinkinio.

Simboliai formato eilutėje

Žvaigždutė (*)

Žvaigždutė (*) yra vėliavėlė, nurodanti, kad priskyrimo operacija turi būti nuslopinta. Iš karto po „%“ ženklo dedama žvaigždutė. Pavyzdžiui,

Scanf("%d%*c%d", &x, &y); //nepaisyti simbolio tarp dviejų sveikųjų skaičių. scanf("%s%*d%s", str, str2); //nepaisyti sveikojo skaičiaus tarp dviejų eilučių.

Tai yra, jei konsolėje įvesite eilutę „45-20“, programa atliks šiuos veiksmus:

  1. Kintamajam "x" bus priskirta 45 reikšmė.
  2. Kintamajam "y" bus priskirta 20 reikšmė.
  3. O minuso ženklas (brūkšnelis) „-“ bus ignoruojamas dėl „%*c“.

Plotis (arba lauko plotis)

Tai yra sveikasis skaičius tarp ženklo „%“ ir formato specifikatoriaus, nurodančio didžiausią simbolių skaičių, kurį reikia nuskaityti atliekant dabartinę skaitymo operaciją.

Reikia atsiminti keletą svarbių punktų:

  1. „scanf“ nustos veikti, jei aptiks skiriamąjį simbolį, net jei jis nesuskaičiavo 20 simbolių.
  2. Jei įvestyje yra daugiau nei 20 simbolių, tik pirmieji 20 iš jų bus įrašyti į str kintamąjį.

Tipo modifikatoriai (arba tikslumas)

Tai yra specialios vėliavėlės, kurios keičia numatomų įvesti duomenų tipą. Vėliava nurodoma tipo specifikatoriaus kairėje:

  • L arba l (mažas L) Naudojant "l" su specifikacijomis d, i, o, u, x, vėliavėlė nurodo programai, kad laukiama long int tipo įvesties. Naudojant „l“ su e arba f specifikacija, vėliavėlė nurodo programai, kad ji turėtų tikėtis, kad bus įvesta dviguba reikšmė. Naudojant „L“, programa nurodoma, kad tikimasi ilgio dvigubo tipo reikšmės. Naudojant „l“ su „c“ ir „s“ specifikacijomis programa nurodoma, kad tikimasi wchar_t tipo dviejų baitų simbolių. Pavyzdžiui, „%lc“, „%ls“, „%l“.
  • h yra vėliavėlė, nurodanti trumpą tipą.
  • hh – nurodo, kad kintamasis yra žymeklis į reikšmes, kurių tipas yra signed char arba unsigned char. Vėliava gali būti naudojama su specifikacijomis d, i, o, u, x, n.
  • ll (du maži L) – nurodo, kad kintamasis yra žymeklis į vertę, kurios tipas signed int arba unsigned long long int. Vėliava naudojama su specifikacijomis: d, i, o, u, x, n.
  • j – reiškia, kad kintamasis yra rodyklė įvesti intmax_t arba uintmax_t iš stdint.h antraštės failo. Naudojamas su specifikacijomis: d, i, o, u, x, n.
  • z - reiškia, kad kintamasis yra rodyklė į tipą size_t, kurio apibrėžimas yra stddef.h. Naudojamas su specifikacijomis: d, i, o, u, x, n.
  • t – reiškia, kad kintamasis yra rodyklė įvesti ptrdiff_t. Šio tipo apibrėžimas yra stddef.h. Naudojamas su specifikacijomis: d, i, o, u, x, n.

Paveikslėlis su modifikatoriais gali būti aiškiau pateiktas lentelės pavidalu. Šis scanf C aprašymas bus aiškesnis programuotojams.

Kiti personažai

Visi šiame formate aptikti simboliai bus atmesti. Verta paminėti, kad tarpo ar skiriamųjų simbolių (naujos eilutės, tarpo, skirtuko) buvimas valdymo eilutėje gali lemti skirtingą funkcijos elgesį. Vienoje versijoje scanf() skaitys neišsaugodamas jokio skirtuko skaičiaus, kol susidurs su kitu simboliu nei skyriklis, o kitoje versijoje tarpai (tik jie) neturi reikšmės, o išraiška „%d + %d“ yra lygiavertė. į „% d+%d“.

Pavyzdžiai

Pažvelkime į keletą pavyzdžių, kurie padės jums pagalvoti ir tiksliau suprasti, kaip veikia funkcija.

Scanf("%3s", str); //jei pulte įvesite eilutę "1d2s3d1;3", str scanf("%dminus%d", &x, &y) bus įrašyta tik "1d2"; //Minus simboliai tarp dviejų skaičių bus atmesti scanf("%5", str); //simboliai bus įvesti į str, kol jų bus 5, o simboliai bus skaičiai nuo 0 iki 9. scanf("%lf", &d); //tikėtina įvestis tipo double scanf("%hd", &x); //tikėtis tipo short scanf("%hu", &y); //tikėtis skaičiaus unsigned short scanf("lx", &z); //tikėtinas tipo skaičius long int

Iš pateiktų pavyzdžių galite matyti, kaip numatomas skaičius keičiasi naudojant skirtingus simbolius.

scanf C - aprašymas pradedantiesiems

Šis skyrius bus naudingas pradedantiesiems. Dažnai po ranka reikia turėti ne tiek išsamų scanf C aprašymą, kiek išsamią informaciją apie tai, kaip ši funkcija veikia.

  • Funkcija yra šiek tiek pasenusi. Yra keletas skirtingų diegimų skirtingų versijų bibliotekose. Pavyzdžiui, patobulinta funkcija scanf S C, kurios aprašymą galima rasti Microsoft svetainėje.
  • Specifikacijų skaičius formate turi atitikti funkcijai perduodamų argumentų skaičių.
  • Įvesties srauto elementai turi būti atskirti tik skiriamaisiais ženklais: tarpas, tabuliacija, nauja eilutė. Kablelis, kabliataškis, taškas ir tt – šie simboliai nėra funkcijos scanf() skyrikliai.
  • Jei scanf aptinka skiriamąjį simbolį, įvestis bus sustabdyta. Jei reikia skaityti daugiau nei vieną kintamąjį, scanf pereis prie kito kintamojo skaitymo.
  • Mažiausias įvesties duomenų formato neatitikimas lemia nenuspėjamus programos rezultatus. Gerai, jei programa tiesiog baigiasi klaida. Tačiau dažnai programa toliau veikia ir daro tai neteisingai.
  • scanf("%20s ...", ...); Jei įvesties srautas viršija 20 simbolių, „scanf“ nuskaitys pirmuosius 20 simbolių ir baigs arba pereis prie kito kintamojo skaitymo, jei nurodyta. Kitas nuskaitymo skambutis tęs įvesties srauto skaitymą nuo tos vietos, kur baigėsi ankstesnis nuskaitymo skambutis. Jei skaitant pirmuosius 20 simbolių aptinkamas skyriklio simbolis, „scanf“ nustos veikti arba pereis prie kito kintamojo skaitymo, net jei jis nenuskaitė 20 pirmojo kintamojo simbolių. Tokiu atveju visi nesuskaičiuoti simboliai bus pridėti prie kito kintamojo.
  • Jei nuskaitomų ženklų rinkinys prasideda ženklu „^“, „scanf“ skaitys duomenis, kol susidurs su skiriamuoju ženklu arba simboliu iš rinkinio. Pavyzdžiui, „%[^A-E1-5]“ skaitys duomenis iš srauto, kol bus aptiktas vienas iš didžiųjų anglų simbolių nuo A iki E arba vienas iš skaičių nuo 1 iki 5.
  • Funkcija scanf C, kaip aprašyta, grąžina skaičių, lygų sėkmingam kintamųjų įrašų skaičiui. Jei scanf įrašo 3 kintamuosius, tai sėkmingo funkcijos veikimo rezultatas bus skaičiaus 3 grąžinimas. Jei scanf negalėjo parašyti jokių kintamųjų, rezultatas bus 0. Ir galiausiai, jei scanf negalėjo pradėti dirbti dėl kokių nors priežasčių rezultatas bus EOF .
  • Jei funkcija scanf() tinkamai nebaigė savo darbo. Pavyzdžiui, scanf("%d", &x) – buvo tikimasi skaičiaus, bet simboliai buvo gauti kaip įvestis. Kitas scanf() skambutis prasidės nuo to įvesties srauto taško, kur baigėsi ankstesnis funkcijos iškvietimas. Norėdami išspręsti šią problemą, turite atsikratyti probleminių simbolių. Tai galima padaryti, pavyzdžiui, iškviečiant scanf("%*s"). Tai reiškia, kad funkcija perskaitys simbolių eilutę ir išmes ją. Tokiu protingu būdu galite toliau įvesti reikiamus duomenis.
  • Kai kurie „scanf()“ diegimai neleidžia nuskaityti simbolių rinkinyje naudoti „-“.
  • „%c“ specifikacija nuskaito kiekvieną srauto simbolį. Tai yra, jis taip pat skaito skiriamąjį simbolį. Norėdami praleisti skiriamąjį simbolį ir toliau skaityti norimą simbolį, galite naudoti „%1s“.
  • Kai naudojate „c“ specifikaciją, priimtina naudoti plotį „%10c“, tačiau tuomet turite perduoti char tipo elementų masyvą kaip kintamąjį Scanf funkcijai.
  • „%“ reiškia „visos mažos anglų kalbos abėcėlės raidės“, o „%“ tiesiog reiškia 3 simbolius: „z“, „a“, „-“. Kitaip tariant, simbolis „-“ reiškia diapazoną tik tuo atveju, jei jis yra tarp dviejų teisinga tvarka išdėstytų simbolių. Jei „-“ yra išraiškos pabaigoje, pradžioje arba neteisinga simbolių tvarka abiejose jos pusėse, tai tiesiog reiškia brūkšnelį, o ne diapazoną.

Išvada

Taip baigiamas scanf C aprašymas. Tai gera patogumo funkcija dirbant su mažomis programomis ir naudojant procedūrinį programavimo metodą. Tačiau pagrindinis trūkumas yra nenuspėjamų klaidų, kurios gali atsirasti naudojant scanf, skaičius. Todėl geriausia programuojant prieš akis turėti scanf C aprašymą. Dideliuose profesionaliuose projektuose iostreams naudojami dėl to, kad jie turi aukštesnio lygio galimybes, geriau sugeba pagauti ir apdoroti klaidas, taip pat dirbti su dideliu informacijos kiekiu. Taip pat reikėtų pažymėti, kad „scanf C“ aprašymas rusų kalba yra prieinamas daugelyje internetinių šaltinių, taip pat jo naudojimo pavyzdžių dėl funkcijos amžiaus. Todėl, jei reikia, visada galite rasti atsakymą teminiuose forumuose.

C/C++ standartinėje bibliotekoje yra daug funkcijų, skirtų skaitymui ir rašymui į konsolę (klaviatūrą ir monitorių). Šios funkcijos nuskaito ir rašo duomenis kaip paprastą simbolių srautą.

Programavime vartojama srauto sąvoka yra glaudžiai susijusi su įprastu, kasdieniu šio žodžio supratimu. Įvesties srautas gali būti lyginamas su vamzdžiu, kuriuo vanduo (informacija) patenka į baseiną (kompiuterio atmintį), o išėjimo srautą galima palyginti su vamzdžiu, kuriuo vanduo išeina iš baseino. Svarbi šio vamzdžio savybė yra ta, kad duomenys vienu metu gali judėti tik viena kryptimi. Net jei įvedimui ir išėjimui naudojamas tas pats vamzdis, tai negali atsitikti vienu metu: norint perjungti srauto kryptį, reikia jį sustabdyti, atlikti tam tikrą veiksmą ir tik tada srautą galima nukreipti priešinga kryptimi. Kitas upelio bruožas yra tai, kad jis beveik niekada neišsenka. Kartais jis išdžiūsta, tačiau šis laikotarpis negali būti ilgas, jei sistema veikia normaliai.

Standartinė išvesties funkcija printf()

Funkcija printf() yra standartinė išvesties funkcija. Naudodamiesi šia funkcija, monitoriaus ekrane galite rodyti simbolių eilutę, skaičių, kintamojo reikšmę...

Funkcija printf() turi prototipą stdio.h
int printf(char *control string, ...);

Jei pavyks, printf() grąžina išspausdintų simbolių skaičių.

Valdymo eilutėje yra dviejų tipų informacija: simboliai, kurie spausdinami tiesiogiai ekrane, ir formato specifikacijos, nurodančios, kaip spausdinami argumentai.

Funkcija printf() yra suformatuota išvesties funkcija. Tai reiškia, kad funkcijos parametruose būtina nurodyti duomenų, kurie bus išvesti, formatą. Duomenų formatą nurodo formato specifikatoriai. Formato specifikacija prasideda simboliu %, po kurio nurodomas formato kodas.

Formato specifikacijos:

%Su simbolis
%d sveikasis dešimtainis skaičius
%i sveikasis dešimtainis skaičius
%e dešimtainis skaičius formos x.xx e+xx
%E dešimtainis skaičius formos x.xx E+xx
%f
%F dešimtainis slankiojo kablelio skaičius xx.xxxx
%g %f arba %e, atsižvelgiant į tai, kuris yra trumpesnis
%G %F arba %E, atsižvelgiant į tai, kuris yra trumpesnis
%o aštuntainis skaičius
%s simbolių eilutę
%u nepasirašytas dešimtainis skaičius
%x šešioliktainis skaičius
%X šešioliktainis skaičius
%% simbolis %
%p rodyklė
%n rodyklė

Be to, formatavimo komandoms gali būti taikomi modifikatoriai l ir h.

%ld spausdinti ilgai tarpt
%hu antspaudas trumpas nepasirašytas
%Lf ilgas dvigubas antspaudas

Formato specifikacijoje po simbolio % galima nurodyti tikslumą (skaitmenų skaičius po kablelio). Tikslumas nustatomas taip: %.n<код формата>. Kur n yra skaitmenų skaičius po kablelio, ir<код формата>- vienas iš pirmiau nurodytų kodų.

Pavyzdžiui, jei turime kintamąjį x=10.3563 plaukiojančio tipo ir norime parodyti jo reikšmę 3 skaitmenų po kablelio tikslumu, tuomet turėtume parašyti:

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

Rezultatas:
Kintamasis x = 10,356

Taip pat galite nurodyti minimalų spausdinimui skirto lauko plotį. Jei eilutė arba skaičius yra didesnis nei nurodytas lauko plotis, tada eilutė arba skaičius išspausdinamas visas.

Pavyzdžiui, jei rašote:

printf("%5d",20);

tada rezultatas bus toks:
20

Atkreipkite dėmesį, kad skaičius 20 nebuvo atspausdintas nuo pat eilutės pradžios. Jei norite, kad nepanaudotos lauko erdvės būtų užpildytos nuliais, prieš lauko plotį turite įrašyti simbolį 0.

Pavyzdžiui:

printf("%05d",20);

Rezultatas:
00020

Be duomenų formato specifikacijų, valdymo eilutėje gali būti valdymo simbolių:

\b BS, apačioje
\f Naujas puslapis, puslapio pakeitimas
\n Nauja eilutė, eilutės tiekimas
\r Vežimo grąžinimas
\t Horizontali lentelė
\v Vertikalus skirtukas
\" Dviguba citata
\" Apostrofas
\\ Pasvirasis brūkšnys
\0 Nulinis simbolis, nulinis baitas
\a Signalas
\N Aštuontainė konstanta
\xN Šešioliktainė konstanta
\? Klaustukas

Dažniausiai naudosite \n simbolį. Naudodami šį valdymo simbolį galite pereiti į naują eilutę. Pažvelkite į programų pavyzdžius ir viską suprasite.

Programų pavyzdžiai.

/* 1 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
int a,b,c; // Kintamųjų a,b,c deklaravimas
a = 5;
b = 6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Programos rezultatas:
a = 5, b = 6, c = 9

/* 2 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
plūduriuoti x,y,z;

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

Printf("Objekto koordinatės: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Programos rezultatas:
Objekto koordinatės: x:10.50, y:130.67, z:54.00

/* 3 pavyzdys */
#įtraukti

negalioja pagrindinis ()
{
int x;

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

Programos rezultatas:
x=10

/* 4 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
printf("\"Tekstas kabutėse\"");
printf("\nDeguonies kiekis: 100%%");
}

Programos rezultatas:
"Tekstas kabutėse"
Deguonies kiekis: 100%

/* 5 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
int a;

A=11; // 11 dešimtainėje yra lygus b šešioliktainėje
printf("a-dec=%d, a-hex=%X",a,a);
}

Programos rezultatas:
a-dec=11, a-hex=b

/* 6 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
char ch1,ch2,ch3;

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

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

Programos rezultatas:
ABC

/* 7 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
char *str="Mano eilutė.";

Printf("Tai %s",str);
}

Programos rezultatas:
Tai yra Mano linija.

/* 8 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
printf("Sveiki!\n"); // Po spausdinimo bus pereita prie naujos eilutės - \n
printf("Mano vardas Pavelas."); // Tai bus atspausdinta naujoje eilutėje
}

Programos rezultatas:
Sveiki!
Mano vardas Pavelas.

Standartinė įvesties funkcija scanf()

Funkcija scanf() yra suformatuota įvesties funkcija. Su jo pagalba galite įvesti duomenis iš standartinio įvesties įrenginio (klaviatūros). Įvesties duomenys gali būti sveikieji skaičiai, slankaus kablelio skaičiai, simboliai, eilutės ir rodyklės.

Funkcija scanf() turi tokį prototipą stdio.h:
int scanf(char *control string);

Funkcija grąžina kintamųjų, kuriems buvo priskirta reikšmė, skaičių.

Valdymo eilutėje yra trijų tipų simboliai: formato specifikacijos, tarpai ir kiti simboliai. Formato specifikacijos prasideda simboliu %.

Formato specifikacijos:

Įvedant eilutę naudojant scanf() funkciją (%s formato specifikacija), eilutė įvedama prieš pirmą tarpą!! tie. jei įvesite eilutę "Sveikas pasaulis!" naudojant funkciją scanf().


scanf("%s",str);

tada įvedus gautą eilutę, kuri bus saugoma str masyve, sudarys vienas žodis „Labas“. FUNKCIJA ĮVEDA STYVĄ PRIEŠ PIRMĄ TARPĄ! Jei norite įvesti eilutes su tarpais, naudokite funkciją

char *gets(char *buf);

Naudodami funkciją gets() galite įvesti visas eilutes. Funkcija gets() skaito simbolius iš klaviatūros, kol pasirodys naujos eilutės simbolis (\n). Paspaudus enter, pasirodo pats naujos eilutės simbolis. Funkcija grąžina rodyklę į buf. buf - buferis (atmintis) įvesties eilutei.

Nors gets() nėra šio straipsnio tema, parašykime pavyzdinę programą, leidžiančią klaviatūra įvesti visą eilutę ir parodyti ją ekrane.

#įtraukti

negalioja pagrindinis (negalioja)
{
char buferis; // masyvas (buferis) įvesties eilutei

Gauna(buferis); // įveskite eilutę ir paspauskite enter
printf("%s",buferis); // išveda įvestą eilutę į ekraną
}

Dar viena svarbi pastaba! Norint įvesti duomenis naudojant funkciją scanf(), kaip parametrus reikia perduoti kintamųjų adresus, o ne pačius kintamuosius. Norėdami gauti kintamojo adresą, prieš kintamojo pavadinimą turite įrašyti & (ampersandą). & ženklas reiškia adreso paėmimą.

Ką reiškia adresas? Pabandysiu paaiškinti. Programoje turime kintamąjį. Kintamasis išsaugo savo reikšmę kompiuterio atmintyje. Taigi tai yra adresas, kurį gauname naudodami & yra adresas kompiuterio atmintyje, kuriame saugoma kintamojo reikšmė.

Pažvelkime į programos pavyzdį, kuris parodo, kaip naudoti ir

#įtraukti

negalioja pagrindinis (negalioja)
{
int x;

Printf ("Įveskite kintamąjį x:");
scanf("%d",&x);
printf("Kintamasis x=%d",x);
}

Dabar grįžkime prie funkcijos scanf() valdymo eilutės. Dar kartą:

int scanf(char *control string);

Tarpo simbolis valdymo eilutėje nurodo vieną ar daugiau tarpų, kurie turi būti praleisti įvesties sraute. Be tarpo, galima suvokti skirtuką arba naujos eilutės simbolį. Ne nulis simbolis rodo, kad simbolis perskaitytas ir išmestas.

Skirtikliai tarp dviejų įvestų skaičių yra tarpas, tabuliavimas arba nauja eilutė. * po % ir prieš formato kodą (formato specifikatorių) nurodo duomenų tipą, kurį reikia nuskaityti, bet nepriskirti tai reikšmei.

Pavyzdžiui:

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

įvedus 50+20, kintamasis i bus nustatytas į 50, kintamasis j – 20, o simbolis + bus nuskaitytas ir ignoruojamas.

Formatavimo komanda gali nurodyti didžiausią nuskaityto lauko plotį.

Pavyzdžiui:

scanf("%5s",str);

nurodo, kad reikia perskaityti pirmuosius 5 simbolius iš įvesties srauto. Jei įvesite 1234567890ABC, str masyve bus tik 12345, likusieji simboliai bus ignoruojami. Skirstytuvai: tarpas, tabuliacija ir nauja eilutė – įvedant simbolį jie traktuojami kaip ir visi kiti simboliai.

Jei valdymo eilutėje yra kitų simbolių, jie skirti identifikuoti ir praleisti atitinkamą simbolį. Simbolių srauto 10plus20 operatorius

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

kintamajam x priskirs reikšmę 10, kintamajam y – 20, o pliuso ženklus praleis, nes jie yra valdymo eilutėje.

Viena iš galingų Scanf() funkcijos savybių yra jos galimybė nurodyti nuskaitymo rinkinį. Paieškos rinkinys apibrėžia simbolių rinkinį, su kuriuo bus lyginami funkcijos scanf() nuskaityti simboliai. Funkcija scanf() skaito simbolius tol, kol jie yra paieškos rinkinyje. Kai tik įvestas simbolis nerandamas paieškos rinkinyje, funkcija scanf() pereina prie kito formato specifikatoriaus. Paieškos rinkinys apibrėžiamas laužtiniuose skliaustuose įrašytų simbolių sąrašu. % ženklas dedamas prieš atidaromąjį skliaustą. Pažvelkime į tai su pavyzdžiu.

#įtraukti

negalioja pagrindinis (negalioja)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Įveskime simbolių rinkinį:
12345abcdefg456

Programa bus rodoma ekrane:
12345
abcdefg456

Nurodydami paieškos rinkinį, taip pat galite naudoti brūkšnelį, kad nurodytumėte tarpus, taip pat didžiausią įvesties lauko plotį.

scanf("%10", str1);

Taip pat galite apibrėžti simbolius, kurie neįtraukti į paieškos rinkinį. Prieš pirmąjį iš šių simbolių yra ^. Daugelis simbolių skiria mažąsias ir didžiąsias raides.

Priminsiu, kad naudojant funkciją scanf() kaip parametrus jai reikia perduoti kintamųjų adresus. Viršuje buvo parašytas kodas:

char str; // 80 simbolių masyvas
scanf("%s",str);

Atminkite, kad prieš str nėra &. Tai daroma, nes str yra masyvas, o masyvo pavadinimas - str yra rodyklė į pirmąjį masyvo elementą. Todėl & ženklas neturėtų būti naudojamas. Adresą jau perduodame funkcijai scanf(). Na, paprasčiau tariant, str yra kompiuterio atmintyje esantis adresas, kuriame bus saugoma pirmojo masyvo elemento reikšmė.

Programų pavyzdžiai.

1 pavyzdys.
Ši programa parodo užklausą „Kiek tau metų?:“ ir laukia duomenų įvesties. Jei, pavyzdžiui, įvesite skaičių 20, programa parodys eilutę „Jums 20 metų“. Iškviečiant funkciją scanf() prieš amžiaus kintamąjį įdedame & ženklą, nes funkcijai scanf() reikia kintamųjų adresų. Funkcija scanf() įrašys įvestą reikšmę nurodytu adresu. Mūsų atveju įvesta reikšmė 20 bus parašyta amžiaus kintamojo adresu.

/* 1 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
int amžius;

Printf("\nKiek tau metų?:");
scanf("%d",&amžius);
printf("Jums %d metų.", amžius);
}

2 pavyzdys.
Skaičiuoklės programa. Šis skaičiuotuvas gali pridėti tik skaičius. Įvedus 100+34, programa pateiks rezultatą: 100+34=134.

/* 2 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
int x, y;

Printf("\nSkaičiuoklė:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

3 pavyzdys.
Šiame pavyzdyje parodyta, kaip nustatyti skaitymo lauko plotį. Mūsų pavyzdyje lauko plotis yra penki simboliai. Jei įvesite eilutę, kurioje yra daug simbolių, visi simboliai po 5-ojo bus atmesti. Atkreipkite dėmesį į scanf() funkcijos iškvietimą. Ženklas & nėra prieš masyvo pavadinimo pavadinimą, nes masyvo pavadinimo pavadinimas yra pirmojo masyvo elemento adresas.

/* 3 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
char vardas;

Printf("\nĮveskite savo vartotojo vardą (ne daugiau kaip 5 simboliai):");
scanf("%5s", pavadinimas);
printf("\nĮvedėte %s", vardas);
}

4 pavyzdys.
Paskutinis šio straipsnio pavyzdys parodo, kaip galima naudoti paieškos rinkinį. Paleidę programą įveskite skaičių nuo 2 iki 5.

/* 4 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
char bal;

Printf("Jūsų įvertinimas yra 2,3,4,5:");
scanf("%", &bal);
printf("\nĮvertinimas %c", bal);
}

Šios pamokos skirtos visiems, nesvarbu, ar esate programavimo naujokas, ar turite didelę programavimo kitomis kalbomis patirtį! Ši medžiaga skirta tiems, kurie nori išmokti C/C++ kalbas nuo pačių pagrindų iki sudėtingiausių struktūrų.

C++ yra programavimo kalba, šios programavimo kalbos žinios leis valdyti kompiuterį aukščiausiu lygiu. Idealiu atveju galėsite priversti kompiuterį daryti ką tik norite. Mūsų svetainė padės jums įsisavinti C++ programavimo kalbą.

Diegimas /IDE

Pats pirmas dalykas, kurį turėtumėte padaryti prieš pradėdami mokytis C++, yra įsitikinti, kad turite IDE – integruotą kūrimo aplinką (programą, kurioje programuosite). Jei neturite IDE, tai štai. Kai nuspręsite dėl IDE pasirinkimo, įdiekite jį ir praktikuokite kurdami paprastus projektus.

Įvadas į C++

C++ kalba yra komandų rinkinys, nurodantis kompiuteriui, ką daryti. Šis komandų rinkinys paprastai vadinamas šaltinio kodu arba tiesiog kodu. Komandos yra „funkcijos“ arba „raktiniai žodžiai“. Raktiniai žodžiai (C/C++ rezervuoti žodžiai) yra pagrindiniai kalbos elementai. Funkcijos yra sudėtingos sudedamosios dalys, nes jos parašytos paprastesnėmis funkcijomis – tai pamatysite pačioje pirmoje mūsų programoje, kuri parodyta žemiau. Ši funkcijų struktūra primena knygos turinį. Turinyje gali būti rodomi knygos skyriai, kiekvienas knygos skyrius gali turėti savo turinį, susidedantį iš pastraipų, kiekviena pastraipa gali turėti savo pastraipas. Nors C++ suteikia daug bendrų funkcijų ir rezervuotų žodžių, kuriuos galite naudoti, vis tiek reikia parašyti savo funkcijas.

Nuo kurios programos dalies ji prasideda? Kiekviena programa C++ turi po vieną funkciją, ji vadinama pagrindine arba pagrindine funkcija, nuo šios funkcijos prasideda programos vykdymas. Iš pagrindinės funkcijos taip pat galite iškviesti bet kokias kitas funkcijas, nesvarbu, ar jos yra mūsų parašytos, ar, kaip minėta anksčiau, pateiktas kompiliatoriaus.

Taigi, kaip pasiekti šias standartines funkcijas? Norėdami pasiekti standartines funkcijas, pateikiamas su kompiliatoriumi, turite įtraukti antraštės failą naudodami išankstinio procesoriaus direktyvą - #include . Kodėl tai veiksminga? Pažvelkime į veikiančios programos pavyzdį:

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

Leiskite mums išsamiai apsvarstyti programos elementus. #include yra „išankstinio procesoriaus“ direktyva, kuri nurodo kompiliatoriui prieš kuriant vykdomąjį failą įdėti kodą iš „iostream“ antraštės failo į mūsų programą. Prijungę antraštės failą prie programos, gausite prieigą prie daugybės skirtingų funkcijų, kurias galite naudoti savo programoje. Pavyzdžiui, operatorius cout reikalauja iostream . Eilutė naudojant vardų erdvę std; nurodo kompiliatoriui naudoti funkcijų grupę, kuri yra std standartinės bibliotekos dalis. Ši eilutė taip pat leidžia programai naudoti operatorius, tokius kaip cout. Kabliataškis yra C++ sintaksės dalis. Jis praneša kompiliatoriui, kad tai yra komandos pabaiga. Greitai pamatysite, kad kabliataškiai naudojami daugumai komandų C++ baigti.

Kita svarbi programos eilutė yra int main (). Ši eilutė nurodo kompiliatoriui, kad yra funkcija, vadinama pagrindinė, ir kad funkcija grąžina sveikąjį skaičių. Garbanoti skliaustai ( ir ) rodo funkcijos pradžią (ir pabaigą). Garbanotieji skliaustai naudojami ir kituose kodo blokuose, tačiau jie visada nurodo vieną dalyką – atitinkamai bloko pradžią ir pabaigą.

C++ kalboje objektas cout naudojamas tekstui rodyti (tariamas „C out“). Jis naudoja simbolius<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Kita komanda yra cin.get() . Tai dar vienas funkcijos iškvietimas, kuris nuskaito duomenis iš įvesties duomenų srauto ir laukia, kol bus paspaustas ENTER klavišas. Ši komanda neleidžia konsolės langui užsidaryti, kol nepaspaudžiamas ENTER klavišas. Tai suteikia jums laiko pamatyti programos išvestį.

Pasiekus pagrindinės funkcijos pabaigą (uždarymo garbanotas skliaustas), mūsų programa operacinei sistemai grąžins 0 reikšmę. Ši grąžinimo reikšmė yra svarbi, nes ją analizuodama OS gali nuspręsti, ar mūsų programa sėkmingai baigta, ar ne. Grąžinama vertė 0 reiškia sėkmę ir grąžinama automatiškai (tačiau tik int duomenų tipui; kitos funkcijos reikalauja, kad vertė būtų grąžinama rankiniu būdu), bet jei norėtume grąžinti ką nors kita, pvz., 1, turėtume tai padaryti rankiniu būdu.

#įtraukti naudojant vardų sritį std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Norėdami konsoliduoti medžiagą, įveskite programos kodą savo IDE ir paleiskite jį. Kai programa bus paleista ir pamatysite išvestį, šiek tiek eksperimentuokite su cout teiginiu. Tai padės priprasti prie kalbos.

Būtinai pakomentuokite savo programas!

Pridėkite komentarų prie savo kodo, kad jis būtų aiškesnis ne tik sau, bet ir kitiems. Vykdydamas kodą kompiliatorius nepaiso komentarų, todėl galite naudoti bet kokį komentarų skaičių, kad apibūdintumėte tikrąjį kodą. Norėdami sukurti komentarą, naudokite arba // , kuri nurodo kompiliatoriui, kad likusi eilutė yra komentaras, arba /*, tada */ . Kai mokaisi programuoti, naudinga turėti galimybę komentuoti tam tikras kodo dalis, kad pamatytum, kaip keičiasi programos išvestis. Išsamiai galite perskaityti apie komentavimo techniką.

Ką daryti su visų šių tipų kintamaisiais?

Kartais gali būti painu turėti kelis kintamųjų tipus, kai kai kurie kintamųjų tipai atrodo pertekliniai. Labai svarbu naudoti teisingą kintamojo tipą, nes kai kuriems kintamiesiems reikia daugiau atminties nei kitiems. Be to, dėl jų saugojimo atmintyje būdo, slankiojo kablelio skaičių, slankiųjų ir dvigubų duomenų tipai yra „netikslūs“ ir neturėtų būti naudojami, kai reikia išsaugoti tikslią sveikojo skaičiaus reikšmę.

Kintamųjų deklaravimas C++

Norėdami deklaruoti kintamąjį, naudokite sintaksės tipą<имя>; . Štai keletas kintamųjų deklaracijų pavyzdžių:

Int num; char charakteris; float num_float;

Vienoje eilutėje leidžiama deklaruoti kelis to paties tipo kintamuosius, todėl kiekvienas iš jų turi būti atskirtas kableliu.

Int x, y, z, d;

Jei atidžiai įsižiūrėjote, galbūt pastebėjote, kad po kintamojo deklaracijos visada rašomas kabliataškis. Galite sužinoti daugiau apie kintamųjų įvardijimo tvarką.

Dažnos klaidos deklaruojant kintamuosius C++

Jei bandysite naudoti kintamąjį, kuris nėra deklaruotas, jūsų programa nebus sukompiliuota ir gausite klaidos pranešimą. C++ kalboje visi raktiniai žodžiai, visos funkcijos ir visi kintamieji skiriami didžiosioms ir mažosioms raidėms.

Kintamųjų naudojimas

Taigi dabar jūs žinote, kaip deklaruoti kintamąjį. Štai programos pavyzdys, rodantis kintamojo naudojimą:

#įtraukti naudojant vardų sritį std; int main() ( int numeris; cout<< "Введите число: "; cin >>skaičius; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Pažvelkime į šią programą ir eilutę po eilutės išnagrinėkime jos kodą. Raktinis žodis int rodo, kad skaičius yra sveikasis skaičius. Funkcija cin >> nuskaito reikšmę į skaičių , vartotojas turi paspausti Enter po įvesto skaičiaus. cin.ignore() yra funkcija, kuri nuskaito simbolį ir jo nepaiso. Sutvarkėme įvestį į programą, įvedę skaičių spaudžiame klavišą ENTER, simbolį, kuris taip pat perduodamas į įvesties srautą. Mums jo nereikia, todėl išmetame. Atminkite, kad kintamasis buvo deklaruotas kaip sveikasis skaičius, jei vartotojas bandys įvesti dešimtainį skaičių, jis bus sutrumpintas (ty dešimtainė skaičiaus dalis bus nepaisoma). Pabandykite įvesti dešimtainį skaičių arba simbolių seką, kai paleisite pavyzdinę programą, atsakymas priklausys nuo įvesties reikšmės.

Atminkite, kad spausdinant iš kintamojo kabutės nenaudojamos. Kai nėra kabučių, kompiliatorius nurodo, kad yra kintamasis, todėl programa turi patikrinti kintamojo reikšmę, kad vykdymo metu pakeistų kintamojo pavadinimą jo reikšme. Keli poslinkių teiginiai toje pačioje eilutėje yra visiškai priimtini ir išvestis bus atliekama ta pačia tvarka. Turėtumėte atskirti eilučių literalius (eilutes kabutėse) ir kintamuosius, kiekvienam suteikdami savo poslinkio operatorių<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Vertybių keitimas ir lyginimas

Žinoma, nesvarbu, kokio tipo duomenis naudojate, kintamieji nėra labai įdomūs be galimybės pakeisti jų reikšmę. Toliau pateikiami kai kurie operatoriai, naudojami kartu su kintamaisiais:

  • * daugyba,
  • - atimti,
  • + papildymas,
  • / skyrius,
  • = užduotis,
  • == lygybė,
  • > daugiau
  • < меньше.
  • != nelygus
  • >= didesnis arba lygus
  • <= меньше или равно

Operatoriai, atliekantys matematines funkcijas, turi būti naudojami priskyrimo ženklo dešinėje, kad būtų galima priskirti rezultatą kairėje esančiam kintamajam.

Štai keletas pavyzdžių:

A = 4 * 6; // naudokite eilutės komentarą ir kabliataškį, a yra lygus 24 a = a + 5; // lygi pradinės reikšmės ir penkių sumai a == 5 // nepriskiria penkių, patikrina ar lygi 5 ar ne

Jūs dažnai naudosite == konstrukcijose, pvz., sąlyginiuose sakiniuose ir kilpose.

A< 5 // Проверка, a менее пяти? a >5 // Patikrinkite, ar daugiau nei penki? a == 5 // Tikrinama, ar a lygi penkiems? a != 5 // Patikrinkite, ar nelygu penki? a >= 5 // Patikrinkite, ar a yra didesnis arba lygus penkiems? a<= 5 // Проверка, a меньше или равно пяти?

Šie pavyzdžiai nelabai aiškiai parodo palyginimo ženklų naudojimą, bet kai pradėsime studijuoti atrankos operatorius, suprasite, kodėl tai būtina.

1. Įvadas

Programavimui reikalingi nauji universalūs algoritminiai modeliai, o aparatinė įranga realizuoja algoritmus ne tik kitokia forma, bet ir kitokio algoritminio modelio – automatų – pagrindu. Technologijos skolinimasis iš aparatinės įrangos kūrimo yra pagrindinė automatinio programavimo idėja. Tačiau skaitmeninių įrenginių sintezė skiriasi nuo programavimo. Bet skolinantis modelį, viena vertus, nepatartina jo smarkiai keisti, kita vertus, negalima ignoruoti jau egzistuojančios programavimo teorijos ir praktikos.

Toliau apžvelgsime automatinių programų kūrimo technologiją SWITCH, kurioje nuolat susiduriate su panašiais procesais. Viena vertus, jis taip pakeitė baigtinių būsenų mašinos modelį, kad iš tikrųjų peržengė automatų teorijos ribas. Ir, kita vertus, į programavimą įtraukiamos sąvokos, kurias programuotojams sunku suvokti, o kartais jos yra tiesiog nereikalingos, nes yra daugiau pažįstamų analogų iš programų teorijos ir programavimo praktikos.

Aptardami automatinio programavimo problemas, paimsime neseniai paskaitą Shalyto A.A. ir jo „programavimo“ straipsniai link automatinio programavimo paradigmos apibrėžimo.

Mokytis C++ programavimo kalbos pagrindų ir subtilybių. Vadovėlis su praktinėmis užduotimis ir testais. Ar nori išmokti programuoti? Tuomet esate tinkamoje vietoje – čia yra nemokami programavimo mokymai. Nesvarbu, ar esate patyręs, ar ne, šios programavimo pamokos padės jums pradėti kurti, kompiliuoti ir derinti C++ programas įvairiose kūrimo aplinkose: „Visual Studio“, „Code::Blocks“, „Xcode“ ar „Eclipse“.

Daug pavyzdžių ir išsamių paaiškinimų. Puikiai tinka tiek pradedantiesiems (manekenams), tiek pažengusiems. Viskas paaiškinama nuo nulio iki smulkmenų. Šios pamokos (200+) suteiks gerą pagrindą/pamatus suprasti programavimą ne tik C++, bet ir kitomis programavimo kalbomis. Ir tai visiškai nemokama!

Taip pat pateikiamas žingsnis po žingsnio žaidimo kūrimas C++, SFML grafikos biblioteka ir daugiau nei 50 užduočių, skirtų jūsų C++ įgūdžių ir žinių patikrinimui. Papildoma premija yra.

Už perskelbimą +20 karmai ir mano dėkingumas!

Skyrius Nr.0. Įvadas. Darbo pradžia

1 skyrius. C++ pagrindai

2 skyrius. Kintamieji ir pagrindiniai duomenų tipai C++

3 skyrius. Operatoriai C++

4 skyrius. Taikymo sritis ir kitų tipų kintamieji C++

5 skyrius. Kodo vykdymo tvarka programoje. Kilpos ir šakos C++



 


Skaityti:



Geriausių belaidžių ausinių įvertinimas

Geriausių belaidžių ausinių įvertinimas

Ar galima nebrangiai įsigyti universalių ausų? 3000 rublių – ar už tokius pinigus galima nusipirkti kokybiškų ausinių? Kaip paaiškėjo, taip. Ir kalba...

Pagrindinė mobiliojo įrenginio kamera dažniausiai yra užpakalinėje korpuso dalyje ir naudojama fotografuoti bei filmuoti

Pagrindinė mobiliojo įrenginio kamera dažniausiai yra užpakalinėje korpuso dalyje ir naudojama fotografuoti bei filmuoti

Atnaujinta planšetės versija su patobulintomis charakteristikomis ir dideliu autonomiškumu.Acer išmanieji telefonai retai lankomi...

Kaip persijungti į kitą operatorių išsaugant savo numerį

Kaip persijungti į kitą operatorių išsaugant savo numerį

Įstatymas dėl telefono numerio išsaugojimo, kai abonentas pereina prie kito mobiliojo ryšio operatoriaus, Rusijoje įsigaliojo gruodžio 1 d. Tačiau paaiškėjo, kad...

phableto apžvalga, brangi, bet labai kompetentinga

phableto apžvalga, brangi, bet labai kompetentinga

Apžvalga apie phablet, brangus, bet labai kompetentingas 2015-03-20 Esu vienintelis batsiuvys pasaulyje be batų, išmaniųjų telefonų apžvalgininkas be savo išmaniojo telefono....

tiekimo vaizdas RSS