Scanf C paglalarawan ng function
Scanf C paglalarawan ng function

Video: Scanf C paglalarawan ng function

Video: Scanf C paglalarawan ng function
Video: SINO-SINO ANG MGA EXEMPTED SA TAX SA PILIPINAS 2024, Nobyembre
Anonim

Sa artikulong ito, ang scanf() function ay isinasaalang-alang sa isang pangkalahatang anyo nang walang reference sa isang partikular na pamantayan, kaya ang data mula sa anumang C99, C11, C++11, C++14 na pamantayan ay kasama dito. Marahil, sa ilang pamantayan, gumagana ang function na may mga pagkakaiba mula sa materyal na ipinakita sa artikulo.

scanf C function - paglalarawan

Ang scanf() ay isang function na matatagpuan sa stdio.h(C) at cstdio(C++) header file, na kilala rin bilang formatted program input. Binabasa ng scanf ang mga character mula sa karaniwang input stream (stdin) at kino-convert ang mga ito ayon sa format, pagkatapos ay isusulat ang mga ito sa tinukoy na mga variable. Format - nangangahulugan na ang data ay na-convert sa isang tiyak na form kapag natanggap. Kaya, ang scanf C function ay inilarawan:

scanf("%format", &variable1[, &variable2, […]), kung saan ipinapasa ang mga variable bilang mga address. Ang dahilan para sa ganitong paraan ng pagpasa ng mga variable sa isang function ay halata: bilang isang resulta ng trabaho, ito ay nagbabalik ng isang halaga na nagpapahiwatig ng pagkakaroon ng mga error, kayaang tanging paraan upang baguhin ang mga halaga ng mga variable ay sa pamamagitan ng pagpasa sa address. Gayundin, salamat sa paraang ito, ang function ay maaaring magproseso ng data ng anumang uri.

Tinutukoy ng ilang programmer ang mga function tulad ng scanf() o printf() bilang mga pamamaraan dahil sa pagkakatulad sa ibang mga wika.

Scanf ay nagbibigay-daan sa input ng lahat ng pangunahing uri ng wika: char, int, float, string, atbp. Sa kaso ng mga variable ng uri ng string, hindi na kailangang tukuyin ang address sign - "&", dahil ang variable ng uri ng string ay isang array, at ang pangalan nito ay ang address ng unang elemento ng array sa memorya ng computer.

Gamit ang C sa C++
Gamit ang C sa C++

Format sa pagpasok ng data o control string

Magsimula sa pamamagitan ng pagtingin sa halimbawa ng function ng scanf C mula sa paglalarawan.


isama ang int main() { int x; habang (scanf("%d", &x)==1) printf("%d\n", x); bumalik 0; //kailangan para sa mga linux system }

Ang input format ay binubuo ng sumusunod na apat na parameter: %[width][modifiers] type. Sa kasong ito, ang sign na "%" at ang uri ay mga mandatoryong parameter. Ibig sabihin, ganito ang hitsura ng minimum na format: “%s”, “%d” at iba pa.

Sa pangkalahatan, ang mga character na bumubuo sa string ng format ay nahahati sa:

  • format specifiers - anumang bagay na nagsisimula sa %;
  • naghihiwalay o puwang na mga character - sila ay space, tab(t), newline (n);
  • character maliban sa whitespace.

Maaaring hindi ligtas ang function.

Gamitin ang scanf_s() sa halip na scanf().

(mensahe mula sa Visual Studio)

Type, o format specifiers, o conversion character, o control character

binary code
binary code

Ang isang scanf C na deklarasyon ay dapat maglaman ng kahit man lang isang format specifier, na tinukoy sa dulo ng mga expression na nagsisimula sa "%". Sinasabi nito sa programa ang uri ng data na aasahan kapag pumapasok, kadalasan mula sa keyboard. Listahan ng lahat ng tagatukoy ng format sa talahanayan sa ibaba.

Uri

Kahulugan
1 %c Naghihintay ang program para sa input ng character. Ang variable na isusulat ay dapat na may uri ng character na char.
2 %d Inaasahan ng program ang input ng decimal na numero ng uri ng integer. Dapat ay nasa uri ng int ang variable.
3 %i Inaasahan ng program ang input ng decimal na numero ng uri ng integer. Dapat ay nasa uri ng int ang variable.
4 %e, %E Inaasahan ng program na magpasok ng isang floating point (comma) na numero sa exponential form. Dapat ay nasa uri ng float ang variable.
5 %f Inaasahan ng programa ang isang floating point number (kuwit). Dapat ay nasa uri ng float ang variable.
6 %g, %G Inaasahan ng programa ang isang floating point number (kuwit). Dapat ay nasa uri ng float ang variable.
7 %a Inaasahan ng programa ang isang floating point number (kuwit). Dapat ay nasa uri ng float ang variable.
8 %o Inaasahan ng programa ang isang octal na numero. Dapat ay nasa uri ng int ang variable.
9 %s Naghihintay ang program para sa isang string na maipasok. Ang string ay isang set ng anumang mga character hanggang sa unang separator character na nakatagpo. Dapat ay may uri ng string ang variable.
10 %x, %X Naghihintay ang programa ng isang hexadecimal na numero. Dapat ay nasa uri ng int ang variable.
11 %p

Inaasahan ng Variable ang pointer input. Dapat ay nasa uri ng pointer ang variable.

12 %n Nagsusulat sa isang variable ng isang integer na halaga na katumbas ng bilang ng mga character na nabasa sa ngayon ng scanf function.
13 %u Nagbabasa ang program ng unsigned integer. Ang uri ng variable ay dapat na unsigned integer.
14 %b Naghihintay ang program para sa isang binary na numero. Dapat ay nasa uri ng int ang variable.
15 % Na-scan na set ng character. Ang programa ay naghihintay para sa mga character na maipasok.mula sa limitadong pool na tinukoy sa pagitan ng mga square bracket. gagana ang scanf hangga't may mga character mula sa tinukoy na set sa input stream.
16 %% Lagdaan ang "%".

Mga character sa string ng format

C++ code
C++ code

Simbolo ng bituin ()

Ang asterisk () ay isang flag na nagsasaad na dapat na pigilan ang pagpapatakbo ng pagtatalaga. Ang isang asterisk ay inilalagay kaagad pagkatapos ng "%" sign. Halimbawa,


scanf("%d%c%d", &x, &y); // balewalain ang character sa pagitan ng dalawang integer. scanf("%s%d%s", str, str2); // balewalain ang integer sa pagitan ng dalawang string.

Ibig sabihin, kung ilalagay mo ang linyang "45-20" sa console, gagawin ng program ang sumusunod:

  1. Ang variable na "x" ay itatalaga ng value na 45.
  2. Ang variable na "y" ay itatalaga ng value na 20.
  3. At ang minus sign (gitling) na "-" ay hindi papansinin salamat sa "%c".

Lapad (o lapad ng field)

Ito ay isang integer sa pagitan ng "%" sign at ng format specifier na tumutukoy sa maximum na bilang ng mga character na babasahin sa kasalukuyang read operation.


scanf("%20s", str); //basahin ang unang 20 character mula sa input stream

May ilang mahahalagang bagay na dapat tandaan:

  1. Ang scanf ay magwawakas kung makatagpo ito ng separator character, kahit na hindi ito nagbilang ng 20 character.
  2. Kung higit sa 20 character ang input, ang unang 20 character lang ang isusulat sa str.

Mga Modifieruri (o katumpakan)

splash code
splash code

Ito ang mga espesyal na flag na nagbabago sa uri ng data na inaasahan para sa input. Ang flag ay tinukoy sa kaliwa ng uri ng specifier:

  • L o l (maliit na L) Kapag ginamit ang "l" kasama ang mga specifier na d, i, o, u, x, sasabihin ng flag sa program na inaasahan ang mahabang int input. Kapag gumagamit ng "l" kasama ang e o f specifier, ang watawat ay nagsasabi sa programa na dapat itong umasa ng dobleng halaga. Ang paggamit ng "L" ay nagsasabi sa programa na isang mahabang doble ang inaasahan. Ang paggamit ng "l" na may "c" at "s" na mga specifier ay nagsasabi sa programa na ang dalawang-byte na character tulad ng wchar_t ay inaasahan. Halimbawa, "%lc", "%ls", "%l[asd]".
  • Ang h ay isang flag na nagsasaad ng maikling uri.
  • hh - nagsasaad na ang variable ay isang pointer sa isang sign na char o unsigned char value. Maaaring gamitin ang flag kasama ang mga specifier d, i, o, u, x, n.
  • ll (dalawang maliit na L's) - nagsasaad na ang variable ay isang pointer sa isang halaga ng uri na nilagdaan na long long int o unsigned long long int. Ginagamit ang flag sa mga specifier: d, i, o, u, x, n.
  • j - nagsasaad na ang variable ay isang pointer sa uri ng intmax_t o uintmax_t mula sa stdint.h header file. Ginagamit sa mga specifier: d, i, o, u, x, n.
  • z - nagsasaad na ang variable ay isang pointer sa size_t type, ang kahulugan nito ay nasa stddef.h. Ginagamit sa mga specifier: d, i, o, u, x, n.
  • t - nagsasaad na ang variable ay isang pointer sa uri ng ptrdiff_t. Naka-on ang kahuluganang ganitong uri ay nasa stddef.h. Ginagamit sa mga specifier: d, i, o, u, x, n.

Mas malinaw, ang larawang may mga modifier ay maaaring katawanin bilang isang talahanayan. Ang ganitong paglalarawan ng scanf C para sa mga programmer ay magiging mas malinaw.

Uri ng Specifiers at Modifiers
Uri ng Specifiers at Modifiers

Iba pang mga character

Anumang mga character na nakatagpo sa format ay itatapon. Kasabay nito, dapat tandaan na ang pagkakaroon ng mga whitespace o separator character (newline, space, tab) sa control string ay maaaring humantong sa iba't ibang pag-uugali ng function. Sa isang bersyon, magbabasa ang scanf() nang hindi nagse-save ng anumang bilang ng mga separator hanggang sa makatagpo ito ng karakter maliban sa separator, at sa ibang bersyon, ang mga puwang (sila lang) ang hindi gumaganap ng papel at ang expression na "%d + %d" ay katumbas ng "% d+%d".

Halimbawa ng C++ code
Halimbawa ng C++ code

Mga Halimbawa

Tingnan natin ang ilang halimbawa para matulungan kang mag-isip at mas maunawaan kung paano gumagana ang function.


scanf("%3s", str); //kung ilalagay mo ang string na "1d2s3d1;3" sa console, "1d2" lang ang isusulat sa str scanf("%dminus%d", &x, &y); //minus na character sa pagitan ng dalawang numero ay itatapon scanf("%5[0-9]", str); // ang mga character ay ipapasok sa str hanggang magkaroon ng 5 character at ang mga character ay mga numero mula 0 hanggang 9. scanf("%lf", &d); //expect double input scanf("%hd", &x); //inaasahang bilang ng uri short scanf("%hu", &y); //expect unsigned number short scanf("lx", &z); //inaasahang bilang ng uri mahaba int

Mula saIpinapakita ng mga halimbawa sa ibaba kung paano nagbabago ang inaasahang numero gamit ang iba't ibang simbolo.

scanf C - paglalarawan para sa mga nagsisimula

Magiging kapaki-pakinabang ang seksyong ito para sa mga nagsisimula. Kadalasan kailangan mong magkaroon ng hindi gaanong kumpletong paglalarawan ng scanf C bilang mga detalye kung paano gumagana ang function.

  • Medyo lipas na ang feature na ito. Mayroong ilang iba't ibang mga pagpapatupad sa mga aklatan ng iba't ibang mga bersyon. Halimbawa, ang pinahusay na scanf S C function, isang paglalarawan kung saan makikita sa microsoft website.
  • Ang bilang ng mga specifier sa format ay dapat tumugma sa bilang ng mga argumentong ipinasa sa function.
  • Ang mga elemento ng stream ng input ay dapat paghiwalayin lamang ng mga character ng separator: space, tab, bagong linya. Comma, semicolon, tuldok, atbp. - ang mga character na ito ay hindi mga separator para sa scanf() function.
  • Kung makatagpo ang scanf ng karakter ng separator, ititigil ang input. Kung mayroong higit sa isang variable na babasahin, ang scanf ay magpapatuloy sa pagbabasa sa susunod na variable.
  • Ang pinakamaliit na hindi pagkakapare-pareho sa format ng data ng pag-input ay humahantong sa mga hindi inaasahang resulta ng programa. Well, kung ang programa ay nagtatapos lamang sa isang error. Ngunit kadalasan ang programa ay patuloy na gumagana at ginagawa itong mali.
  • scanf("%20s …", …); Kung lumampas sa 20 character ang input stream, babasahin ng scanf ang unang 20 character at maaaring i-abort o magpapatuloy sa pagbabasa ng susunod na variable, kung tinukoy ang isa. Sa kasong ito, ang susunod na tawag sa scanf ay magpapatuloy sa pagbabasa ng input stream mula sa punto kung saan huminto ang gawain ng nakaraang tawag sa scanf. Kung kapag binabasa ang unang 20mga character, isang delimiter na character ang nakatagpo, ang scanf ay abort o ipagpapatuloy ang pagbabasa sa susunod na variable, kahit na hindi ito nagbasa ng 20 character para sa unang variable. Sa kasong ito, lahat ng hindi pa nababasang character ay ikakabit sa susunod na variable.
  • Kung ang set ng mga na-scan na character ay nagsisimula sa isang "^", pagkatapos ay babasahin ng scanf ang data hanggang sa makatagpo ito ng delimiter character o isang character mula sa set. Halimbawa, ang "%[^A-E1-5]" ay magbabasa ng data mula sa stream hanggang sa ma-encounter ang isa sa mga uppercase na English na character mula A hanggang E o isa sa mga numero mula 1 hanggang 5.
  • Ang scanf C function, gaya ng inilarawan, ay nagbabalik ng numerong katumbas ng matagumpay na bilang ng mga pagsusulat sa mga variable. Kung ang scanf ay nagsusulat ng 3 variable, ang resulta ng tagumpay ng function ay magbabalik ng numero 3. Kung ang scanf ay hindi makapagsulat ng anumang mga variable, ang resulta ay magiging 0. At, sa wakas, kung ang scanf ay hindi makapagsimula sa lahat para sa ilang kadahilanan, ang ang magiging resulta ay EOF.
  • Kung ang scanf() function ay natapos nang hindi tama. Halimbawa, scanf("%d", &x) - isang numero ang inaasahan, ngunit ang mga character ay natanggap bilang input. Ang susunod na scanf() na tawag ay magsisimula sa punto sa input stream kung saan natapos ang nakaraang function call. Upang malampasan ang problemang ito, kinakailangan upang mapupuksa ang mga character ng problema. Magagawa ito, halimbawa, sa pamamagitan ng pagtawag sa scanf("%s"). Iyon ay, babasahin ng function ang isang string ng mga character at itatapon ito. Sa ganitong nakakalito na paraan, maaari kang magpatuloy sa paglalagay ng kinakailangang data.
  • Sa ilang pagpapatupad ng scanf(), hindi pinapayagan ang "-" sa na-scan na set ng character.
  • Binabasa ng "%c" specifier ang bawat character mula sa stream. Ibig sabihin, binabasa rin nito ang karakter ng separator. Upang laktawan ang delimiter character at ipagpatuloy ang pagbabasa ng gustong character, maaari mong gamitin ang "%1s".
  • Kapag ginagamit ang "c" specifier, pinapayagang gamitin ang lapad na "%10c", ngunit pagkatapos ay isang hanay ng mga elemento ng uri ng char ang dapat ipasa bilang variable sa scanf function.
  • Ang ibig sabihin ng “%[a-z]” ay “lahat ng maliliit na letra ng English alphabet”, at ang ibig sabihin ng “%[z-a]” ay 3 character lang: ‘z’, ‘a’, ‘-’. Sa madaling salita, ang "-" na character ay nangangahulugang isang hanay lamang kung ito ay nasa pagitan ng dalawang character na nasa tamang pagkakasunud-sunod. Kung ang "-" ay nasa dulo ng isang expression, sa simula, o sa maling pagkakasunud-sunod ng mga character sa magkabilang gilid ng mga ito, ito ay isang hyphen character lamang, hindi isang range.
C++ code
C++ code

Konklusyon

Ito ay nagtatapos sa paglalarawan ng scanf C. Ito ay isang magandang madaling gamiting feature para sa pagtatrabaho sa maliliit na programa at kapag gumagamit ng pamamaraan ng procedural programming. Gayunpaman, ang pangunahing kawalan ay ang bilang ng mga hindi inaasahang error na maaaring mangyari kapag gumagamit ng scanf. Samakatuwid, ang paglalarawan ng scanf C kapag ang programming ay pinakamahusay na itinatago sa harap ng iyong mga mata. Sa malalaking propesyonal na mga proyekto, ang mga iostream ay ginagamit, dahil sa ang katunayan na sila ay may mas mataas na antas ng mga kakayahan, mas mahusay nilang mahuli at mahawakan ang mga error, at gumagana din sa malaking halaga ng impormasyon. Dapat ding tandaan na ang paglalarawan ng scanf C sa Russian ay magagamit sa maraming mga mapagkukunan ng network, pati na rin ang mga halimbawa nito.gamitin, dahil sa edad ng pag-andar. Samakatuwid, kung kinakailangan, palagi mong mahahanap ang sagot sa mga pampakay na forum.

Inirerekumendang: