V jazyku C, scanf() funkcia sa používa na čítanie formátovaného vstupu zo štandardného vstupu. V opačnom prípade vráti celý počet zapísaných znakov, vráti zápornú hodnotu.
Syntax:
int scanf(const char *characters_set)>
Časová zložitosť: O(n)
Pomocný priestor: O(n) kde n je dĺžka vstupu.
Mnohí z nás poznajú tradičné použitie scanf. No a tu sú niektoré z menej známych faktov
java matematika
Ako prečítať iba časť vstupu, ktorý potrebujeme?
Uvažujme napríklad o nejakom vstupnom toku, ktorý obsahuje iba znaky, za ktorými nasleduje celé číslo alebo pohyblivá čiara. A musíme skenovať iba toto celé číslo alebo pohyblivú čiaru.
Príklad:
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>
Teraz predpokladajme, že nevieme, čo sú predchádzajúce znaky, ale určite vieme, že posledná hodnota je celé číslo. Ako môžeme naskenovať poslednú hodnotu ako celé číslo?
Nižšie uvedené riešenie funguje iba vtedy, ak vstupný reťazec neobsahuje medzery. Napríklad,
Vstup
'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; }> Výkon
Input Value read : 25>
Vysvetlenie : %*s v scanf sa používa na ignorovanie niektorých vstupov podľa potreby. V tomto prípade ignoruje vstup až do ďalšej medzery alebo nového riadku. Podobne, ak napíšete %*d, budú ignorovať celé čísla až do ďalšej medzery alebo nového riadku.
Všeobecné použitie scanf():
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Vstup
plná forma ide
2>
Výkon
a = 2>
Uvedený fakt sa na prvý pohľad nemusí zdať ako užitočný trik. Aby sme pochopili jeho použitie, pozrime sa najprv na fscanf().
Funkcia fscanf v C
Už vás nebaví všetka nemotorná syntax na čítanie zo súborov? fscanf prichádza na pomoc. Táto funkcia slúži na čítanie naformátovaného vstupu z daného streamu v jazyku C.
Syntax:
int fscanf(FILE *ptr, const char *format, ...)>
fscanf číta zo súboru, na ktorý ukazuje ukazovateľ FILE (ptr), namiesto čítania zo vstupného toku.
Návratová hodnota: V prípade neúspešnosti vráti nulu alebo EOF. V opačnom prípade vráti počet úspešne priradených položiek.
Časová zložitosť: O(n)
Pomocný priestor: O(n) kde n je dĺžka vstupu.
Príklad 1: Zvážte nasledujúci textový súbor abc.txt
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Teraz chceme čítať iba pole mesta vyššie uvedeného textového súboru a ignorovať všetky ostatné polia. Kombinácia fscanf a vyššie uvedeného triku to robí ľahko
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; }> Výkon
CITY hyderabad delhi bangalore>
Príklad 2: Zvážte nasledujúci binárny súbor program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
Na prečítanie všetkých hodnôt n1, n2 a n3 zásobníka používame fscanf()
binárny strom v javeC
#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> Výkon
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
Pozrime sa na rozdiely v tabuľkovej forme -:
| scanf() | fscanf() | |
| 1. | Používa sa na čítanie štandardného vstupu. | Táto funkcia sa používa na čítanie vstupu zo súboru |
| 2. | Jeho syntax je -: scanf(const char *formát, ...) | Jeho syntax je -: fscanf(FILE *stream, const char *formát, ...) |
| 3. | Vyžaduje, aby špecifikátory formátu prevzali vstup určitého typu. | Prečíta prúd vo forme bajtu |
| 4. | Vyžaduje tri parametre, ktoré sú: Biely znak , Znak bez medzery, Špecifikátory formátu | Je definovaný v hlavičkovom súbore #include |