În limbajul C, scanf() funcția este utilizată pentru a citi intrarea formatată din stdin. Returnează întregul număr de caractere scrise în el, în caz contrar, returnează o valoare negativă.
Sintaxă:
int scanf(const char *characters_set)>
Complexitatea timpului: Pe)
Spațiu auxiliar: O(n) unde n este lungimea intrării.
Mulți dintre noi cunosc utilizările tradiționale ale scanf. Ei bine, iată câteva dintre faptele mai puțin cunoscute
fundal css
Cum să citim doar o parte din intrarea de care avem nevoie?
De exemplu, luați în considerare un flux de intrare care conține doar caractere urmate de un număr întreg sau de un float. Și trebuie să scanăm doar acel număr întreg sau flotant.
Exemplu:
Input : 'this is the value 100', Output : value read is 100 Input : 'this is the value 21.2', Output : value read is 21.2>C
// C program to demonstrate that // we can ignore some string // in scanf() #include int main() { int a; scanf('This is the value %d', &a); printf('Input value read : a = %d', a); return 0; } // Input : This is the value 100>
Acum, să presupunem că nu știm care sunt caracterele precedente, dar știm cu siguranță că ultima valoare este un număr întreg. Cum putem scana ultima valoare ca un întreg?
Soluția de mai jos funcționează numai dacă șirul de intrare nu are spații. De exemplu,
Intrare
'blablabla 25'>C
// C program to demonstrate use of *s #include int main() { int a; scanf('%*s %d', &a); printf('Input value read : a=%d', a); return 0; }> Ieșire
Input Value read : 25>
Explicaţie : %*s din scanf este folosit pentru a ignora unele intrări după cum este necesar. În acest caz, ignoră intrarea până la următorul spațiu sau linie nouă. În mod similar, dacă scrieți %*d, va ignora numerele întregi până la următorul spațiu sau linie nouă.
Utilizarea generală a scanf():
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Intrare
2>
Ieșire
a = 2>
Faptul de mai sus poate să nu pară un truc util la prima vedere. Pentru a înțelege utilizarea sa, să vedem mai întâi fscanf().
Funcția fscanf în C
V-ați săturat de toată sintaxa stângace de citit din fișiere? bine, fscanf vine în ajutor. Această funcție este folosită pentru a citi intrarea formatată din fluxul dat în limbajul C.
Sintaxă:
int fscanf(FILE *ptr, const char *format, ...)>
fscanf citește dintr-un fișier indicat de pointerul FILE (ptr), în loc să citească din fluxul de intrare.
Valoare returnată: Returnează zero sau EOF, dacă nu are succes. În caz contrar, returnează numărul de articole atribuite cu succes.
Complexitatea timpului: Pe)
Spațiu auxiliar: O(n) unde n este lungimea intrării.
Exemplul 1: Luați în considerare următorul fișier text abc.txt
myflixr
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Acum, vrem să citim doar câmpul oraș al fișierului text de mai sus, ignorând toate celelalte câmpuri. O combinație de fscanf și trucul menționat mai sus face acest lucru cu ușurință
C // C Program to demonstrate fscanf #include // Driver Code int main() { FILE* ptr = fopen('abc.txt', 'r'); if (ptr == NULL) { printf('no such file.'); return 0; } /* Assuming that abc.txt has content in below format NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore */ char buf[100]; while (fscanf(ptr, '%*s %*s %s ', buf) == 1) printf('%s
', buf); return 0; }> Ieșire
CITY hyderabad delhi bangalore>
Exemplul 2: Luați în considerare următorul fișier binar program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
Pentru a citi toate valorile lui n1, n2 și n3 ale bin, folosim fscanf()
C #include #include struct threeNum{ int n1, n2, n3; }; int main(){ int n; struct threeNum num; FILE *fptr; if ((fptr = fopen('program.bin','rb')) == NULL){ printf('Error! opening file'); // Program exits if the file pointer returns NULL. exit(1); } for(n = 1; n < 5; ++n){ fread(&num, sizeof(struct threeNum), 1, fptr); printf('n1: %d n2: %d n3: %d', num.n1, num.n2, num.n3); } fclose(fptr); return 0; } //Code submitted by Susobhan Akhuli> Ieșire
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
Să vedem diferențele într-o formă tabelară -:
| scanf() | fscanf() | |
| 1. | Este folosit pentru a citi intrarea standard. | Această funcție este utilizată pentru a citi intrarea dintr-un fișier |
| 2. | Sintaxa sa este -: scanf(const char *format, …) | Sintaxa sa este -: fscanf(FILE *stream, const char *format, …) matrice de latex |
| 3. | Este necesar ca specificatorii de format să preia intrare de un anumit tip. | Citește fluxul sub formă de octet |
| 4. | Este nevoie de trei parametri care sunt -: Caracter de spațiu alb, caracter fără spații albe, specificatori de format | Este definit în fișierul antet #include |