Funcția Scanf C: descriere
În acest articol, funcția scanf () este considerată în formă generală fără referire la un standard specific, prin urmare aici sunt incluse datele din standardele C99, C11, C ++ 11, C ++ 14. Poate că, în anumite standarde, funcția funcționează cu diferențe față de materialul menționat în articol.
conținut
- Funcția scanf c - descriere
- Formatul de intrare a datelor sau linia de control
- Tipul sau specificatorii de format, caracterele de conversie sau caracterele de control
- Caracterele din șirul format
- Caracterul asterisc (*)
- Lățimea (sau lățimea câmpului)
- Modificatori de tipul (sau acuratețea)
- Alte caractere
- Exemple
- Scanf c - descriere pentru începători
- Concluzie
Funcția Scanf C - descriere
scanf () este o funcție localizată în fișierul antet stdio.h (C) și cstdio (C ++), se mai numește și formatarea datelor introduse în program. scanf citește caracterele din fluxul de intrare standard (stdin) și le transformă în funcție de format, apoi le scrie la variabilele specificate. Format - înseamnă că datele privind admiterea sunt date unui anumit tip. Astfel, funcția scanf C este descrisă:
scanf ("format%", variabilă1 [ variabilă2, [hellip-]]),
unde variabilele sunt transmise ca adrese. Motivul pentru acest mod de a trece variabilele unei funcții este evident: ca rezultat al lucrării, aceasta returnează o valoare care indică erori, astfel încât singura modalitate de a modifica valorile variabilelor este trimiterea la adresă. De asemenea, datorită acestei metode, funcția poate procesa date de orice tip.
Unii programatori, datorită analogiei cu alte limbi, pot apela funcții precum scanf () sau printf (), proceduri.
Scanf vă permite să introduceți toate tipurile de limbă de bază: char, int, float, string, etc. În cazul variabilelor de șir de tip, nu este nevoie să se precizeze un semn de adresă - "", deoarece o variabilă de șir de tip este o matrice, iar numele acesteia este adresa primului element al matricei din memoria calculatorului.
Formatul de intrare a datelor sau linia de control
Să începem cu un exemplu de utilizare a funcției scanf C din descriere.
#include int main () {int x-în timp ce (scanf ("% d", x) == 1) printf ("% d n", x) -doar 0- // cerință linux-sisteme}
Formatul de intrare este format din următorii patru parametri: Tip [%] [lățime] [modificatori]. Semnul "%" și tipul sunt parametri obligatorii. Adică, formatul minimal arată astfel: "% s", "% d" și așa mai departe.
În general, caracterele care alcătuiesc șirul de format sunt împărțite în:
- formatori de specificații - tot ceea ce începe cu caracterul%;
- separarea sau spațiul alb - sunt un spațiu, o filă ( t), o nouă linie ( n);
- caractere care diferă de spațiul alb.
Este posibil ca funcția să nu fie în siguranță.
Utilizați scanf_s () în loc de scanf ().
(un mesaj din Visual Studio)
Tipul sau specificatorii de format, caracterele de conversie sau caracterele de control
Descriere scanf C trebuie să conțină cel puțin un specificator de format, care este indicat la sfârșitul expresiilor începând cu caracterul "%". Acesta îi spune programului tipul de date pe care să-l aștepți la tastare, de obicei de la tastatură. Lista tuturor parametrilor de specificare a formatului din tabelul de mai jos.
număr | tip | valoare |
1 | % c | Programul așteaptă introducerea caracterului. Variabila pentru scriere trebuie să aibă un caracter caracter char. |
2 | % d | Programul așteaptă un număr zecimal de tip întreg. Variabila trebuie să fie de tip int. |
3 | % i | Programul așteaptă un număr zecimal de tip întreg. Variabila trebuie să fie de tip int. |
4 | % e,% E | Programul așteaptă introducerea unui număr în virgulă mobilă (virgulă) în formă exponențială. Variabila trebuie să fie de tip float. |
5 | % f | Programul așteaptă introducerea unui număr în virgulă mobilă (virgulă). Variabila trebuie să fie de tip float. |
6 | % g,% G | Programul așteaptă introducerea unui număr în virgulă mobilă (virgulă). Variabila trebuie să fie de tip float. |
7 | % a | Programul așteaptă introducerea unui număr în virgulă mobilă (virgulă). Variabila trebuie să fie de tip float. |
8 | % o | Programul așteaptă un număr octal. Variabila trebuie să fie de tip int. |
9 | % s | Programul așteaptă o linie. Un șir este un set de caractere înainte de delimitarea primului caracter. Variabila trebuie să fie de tip șir. |
10 | % x,% X | Programul așteaptă un număr hexazecimal. Variabila trebuie să fie de tip int. |
11 | % p | Variabila așteaptă intrarea indicelui. Variabila trebuie să aibă un tip de pointer. |
12 | % n | Scrie o valoare intrega la variabila egala cu numarul de caractere scanate inainte de momentul curent de catre functia scanf. |
13 | % u | Programul citește un număr întreg nesemnat. Tipul variabilei trebuie să fie un număr întreg nesemnat. |
14 | % b | Programul se așteaptă să introducă un număr binar. Variabila trebuie să fie de tip int. |
15 | % [] | Un set de caractere scanate. Programul așteaptă introducerea caracterelor, din piscina restricționată specificată între paranteze pătrate. scanf va funcționa atâta timp cât există caractere din setul specificat pe fluxul de intrare. |
16 | %% | Semnul "%". |
Caracterele din șirul format
Caracterul asterisc (*)
Un asterisc (*) este un steguleț care indică faptul că operația de alocare trebuie să fie suprimată. Asteriscul este plasat imediat după semnul "%". De exemplu,
scanf ("% d% * c% d", x, y) - // ignorați caracterul dintre două numere întregi, - scanf ("% s% * d% s", str, str2) - // ignorați întregul între două rânduri.
Asta este, dacă tastați "45-20" în consolă, programul face următoarele:
- Variabila "x" va fi setată la 45.
- Variabila "y" va fi setată la 20.
- Semnul minus ("liniuță") ";" va fi ignorat datorită "% * c".
Lățimea (sau lățimea câmpului)
Acesta este un număr întreg între caracterul "%" și specificatorul de format, care specifică numărul maxim de caractere care trebuie citite pentru operația curentă de citire.
scanf ("% 20s", str) - // citiți primele 20 de caractere din fluxul de intrare
Ar trebui să fie luate în considerare câteva aspecte importante:
- scanf nu va mai funcționa dacă întâlnește un caracter separator, chiar dacă nu contează 20 de caractere.
- Dacă sunt introduse mai mult de 20 de caractere, numai primele 20 vor fi scrise pe variabila str.
Modificatori de tipul (sau acuratețea)
Acestea sunt steaguri speciale care modifică tipul de date care urmează să fie introdus. Steagul este în partea stângă a tipului de specificator:
- L sau L (mic L) Dacă utilizați "l" cu specificatorii d, i, o, u, x, steagul spune programului că se așteaptă date lungi int. Dacă utilizați "l" cu specificatorul e sau f, steagul spune programului că trebuie să aștepte o valoare dublă. Utilizarea "L" indică programului că se așteaptă o dublă valoare lungă. Folosind "l" cu parametrii "c" și "s" spune programului că sunt așteptate caractere de tip dublu-octet de tip wchar_t. De exemplu, "% lc", "% ls", "% l [asd]".
- h este un steguleț care indică tipul de scurt.
- hh - indică faptul că variabila este un pointer la o valoare a tipului de caractere semnate sau nesemnate. Steagul poate fi utilizat cu specificatorii d, i, o, u, x, n.
- ll (două mici L) - indică faptul că variabila este un indicator la o valoare a tipului semnat mult timp int sau unsign long long int. Steagul este utilizat cu specificatorii: d, i, o, u, x, n.
- j indică faptul că variabila este un pointer la tipul intmax_t sau uintmax_t din fișierul antet stdint.h. Se utilizează cu specificatorii: d, i, o, u, x, n.
- z - indică faptul că variabila este un pointer la tipul size_t, a cărui definiție este în stddef.h. Se utilizează cu specificatorii: d, i, o, u, x, n.
- t înseamnă că variabila este un pointer la tipul ptrdiff_t. Definiția pentru acest tip este în stddef.h. Se utilizează cu specificatorii: d, i, o, u, x, n.
Mai clar, imaginea cu modificatori poate fi reprezentată sub forma unui tabel. Această descriere a scanf C pentru programatori va fi mai clară.
Alte caractere
Orice caractere care vor fi îndeplinite în format vor fi aruncate. Este de remarcat faptul că prezența unei linii de control sau un caracter alb care separă spațiu (NEWLINE, spațiu, tab) poate duce la un comportament diferit al funcției. Într-o versiune de scanf () se va citi fără a salva orice număr de separatoare până la punctul până când se lovește o alta decât delimitator de caractere, și într-o altă versiune - golurile (atunci când acestea) nu joacă un rol, iar expresia „% d +% d“ este echivalent cu „% d +% d ".
exemple
Să luăm în considerare o serie de exemple care ne permit să reflectăm și să înțelegem mai bine funcționarea funcției.
scanf ("% 3s", str) - // dacă tastați "1d2s3d1-3" în consola, numai "1d2" scanf ("% dminus% d" x, y) - // caracterul «minus» între cele două numere vor otbroshenyscanf ( „% 5 [0-9]“, str) - // caracterele de intrare în str vor avea loc atât timp cât acestea nu vor fi de 5, iar simbolurile sunt numerele din 0 până la 9.scanf ("% lf", d) - // se așteaptă să introducă date de tipul doublescanf ("% hd", x) - // așteptați un număr de tip shortscanf ("% hu", y) - // așteptați un număr de shortscanf nesemnate de tip ("lx", z) - // așteptați un număr de tip int int
Din exemplele furnizate, puteți vedea cum variază numărul așteptat în funcție de utilizarea simbolurilor diferite.
scanf C - descriere pentru începători
Această secțiune va fi utilă pentru începători. De multe ori, trebuie să aveți la îndemână nu o descriere completă a scanf C, ca și detalii ale funcției.
- Funcția este oarecum depășită. Există mai multe implementări diferite în bibliotecile diferitelor versiuni. De exemplu, funcția de scanare avansată S C, a cărei descriere poate fi găsită pe site-ul Web Microsoft.
- Numărul de specificatori din format trebuie să corespundă numărului de argumente transmise funcției.
- Elementele fluxului de intrare trebuie să fie separate numai prin separarea simbolurilor: un spațiu, o filă, o linie nouă. Comma, punct și virgulă, perioadă etc. - aceste caractere nu pot fi separate pentru funcția scanf ().
- Dacă scanf întâlnește un caracter separator, intrarea va fi oprită. Dacă există mai multe variabile de citit, atunci scanf va citi citirea următoarei variabile.
- Cea mai mică inconsistență în formatul datelor de intrare duce la rezultate imprevizibile ale programului. Ei bine, dacă programul se termină doar cu o eroare. Dar de multe ori programul continuă să funcționeze și o face în mod incorect.
- scanf ("% 20s hellip- ", hellip -) - Dacă fluxul de intrare depășește 20 caractere, atunci scanf va citi primele 20 de caractere și fie va înceta să lucreze, fie va citi citirea următoarei variabile dacă este specificată. Următorul apel la scanf va continua să citească fluxul de intrare de unde sa oprit apelul scanf anterior. Dacă caracterul de separare este întâlnit în timp ce citiți primele 20 de caractere, scanf se va opri din activitate sau va continua să citească următoarea variabilă, chiar dacă nu numără 20 de caractere pentru prima variabilă. În acest caz, toate simbolurile necitite vor fi atașate la următoarea variabilă.
- Dacă un set de caractere scanate începe cu un "^", atunci scanf va citi datele până când va întâlni un caracter sau un caracter separator din set. De exemplu, "% [^ A-E1-5]" va citi datele din flux până când una dintre literele alfabetului englez de la A la E este întâlnită în majuscule sau unul dintre numerele de la 1 la 5.
- scanf C Funcție Descriere Returnează un număr egal cu numărul de intrări de succes în variabile. În cazul în care stochează scanf 3 variabile, rezultatul succesului funcția va returna numărul 3. Dacă nu scanf ar putea scrie orice variabilă, rezultatul este 0. În cele din urmă, în cazul în care, în general, scanf în imposibilitatea de a începe să lucreze pentru orice motiv, rezultatul este EOF .
- Dacă funcția scanf () și-a finalizat în mod incorect lucrarea. De exemplu, scanf ("% d", x) - numărul așteptat, iar simbolurile de intrare au apărut. Următorul apel scanf () va începe de unde a fost în fluxul de intrare, unde sa terminat apelul pentru funcții anterioare. Pentru a depăși această problemă, trebuie să scăpați de simbolurile problematice. Acest lucru se poate face, de exemplu, apelând scanf ("% * s"). Adică, funcția citește un șir de caractere și o aruncă. Într-un mod atât de viclean, puteți continua să introduceți datele necesare.
- În unele implementări ale scanf (), utilizarea ";" în setul de caractere scanate este inadmisibilă.
- Specificatorul "% c" citește fiecare caracter din flux. Adică, el citește și separatorul de simboluri. Pentru a sări peste caracterul de delimitator și a continua să citești caracterul dorit, poți folosi "% 1s".
- Dacă utilizați calificatorul "c", puteți utiliza lățimea "% 10c", dar apoi sub forma variabilei scanf, trebuie să transferați o serie de elemente char.
- "% [A-z]" înseamnă "toate literele mici ale alfabetului englez", iar "% [z-a]" înseamnă doar 3 caractere: lsquo-zrsquo-, lsquo-arsquo-, lsquo - rsquo. Cu alte cuvinte, simbolul ";" înseamnă un interval numai dacă se află între două caractere care sunt în ordinea corectă. Dacă ";" este la sfârșitul expresiei, la începutul sau în ordinea greșită a personajelor de pe ambele părți ale acestora, atunci este vorba doar de un caracter de cratimă, nu de un interval.
concluzie
Aceasta completează descrierea scanfului C. Aceasta este o funcție convenabilă pentru lucrul în programe mici și folosind metoda de programare procedurală. Cu toate acestea, principalul dezavantaj este cantitatea de erori imprevizibile care pot apărea atunci când se utilizează scanf. Prin urmare, descrierea scanf C în programare este cel mai bine păstrată înaintea ochilor. În proiectele profesionale mari, se folosesc fluxuri iostream, deoarece acestea au capacități de nivel superior, permit mai mult să prindă și să proceseze erorile și, de asemenea, să lucreze cu cantități semnificative de informații. De asemenea, trebuie remarcat faptul că descrierea scanf C în limba rusă este disponibilă pe multe surse de rețea, precum și exemple de utilizare a acesteia, datorită vârstei funcției. Prin urmare, dacă este necesar, puteți găsi întotdeauna un răspuns la forumurile tematice.
- Cum de a recupera datele de pe o unitate flash?
- PHP. Lucrul cu fișiere și directoare
- Funcția VLOOKUP. Utilizând funcția VLOOKUP. Excel - VPR
- Fișier Winmail.dat: cum se deschide
- EMZ: cum se deschide un format similar
- Conversia de tip. Funcții rotunde și Trunc în Pascal
- jаvascript Array pentru a stoca un număr nelimitat de variabile
- Ce face funcția SQL CONCAT?
- Ce face funcția microtime PHP?
- Funcția de tabulare: cum se scrie un program?
- Ecuația de regresie
- Metoda cu cele mai mici pătrate din Excel. Analiza regresiei
- Printf C: descriere, formatare, exemple
- Citirea unui fișier cu fișierul obține funcția de conținut PHP
- Colectarea în baloane a matricei unidimensionale: algoritm, cod de program în limba C
- Regresie liniară
- Funcțiile de distribuție ale unei variabile aleatorii. Cum se găsește funcția de distribuție a unei…
- Funcții în Python: def. Python 3 pentru începători
- Funcția strpos din PHP: determinarea poziției substringului
- Formatarea numerelor: funcția PHP number_format ()
- Funcția Hash: ce este, de ce este nevoie și ce se întâmplă