På C-sprog, scanf() funktion bruges til at læse formateret input fra stdin. Det returnerer hele antallet af tegn skrevet i det ellers returnerer en negativ værdi.
Syntaks:
int scanf(const char *characters_set)>
Tidskompleksitet: På)
Hjælpeplads: O(n) hvor n er længden af input.
Mange af os kender de traditionelle anvendelser af scanf. Nå, her er nogle af de mindre kendte fakta
numpy standardafvigelse
Hvordan læser man kun en del af det input, vi har brug for?
Overvej f.eks. en inputstrøm, der kun indeholder tegn efterfulgt af et heltal eller en float. Og vi skal kun scanne det heltal eller float.
Eksempel:
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>
Antag nu, at vi ikke ved, hvad de foregående tegn er, men vi ved helt sikkert, at den sidste værdi er et heltal. Hvordan kan vi scanne den sidste værdi som et heltal?
Nedenstående løsning virker kun, hvis inputstrengen ikke har mellemrum. For eksempel,
Input
'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; }> Produktion
Input Value read : 25>
Forklaring : %*s i scanf bruges til at ignorere noget input efter behov. I dette tilfælde ignorerer den inputtet indtil næste mellemrum eller ny linje. På samme måde, hvis du skriver %*d, vil det ignorere heltal indtil næste mellemrum eller linjeskift.
Generel brug af scanf( ):
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Input
2>
Produktion
a = 2>
Ovenstående kendsgerning virker måske ikke som et brugbart trick ved første øjekast. For at forstå dets brug, lad os først se fscanf().
fscanf-funktion i C
Træt af al den klodsede syntaks at læse fra filer? godt, fscanf kommer til undsætning. Denne funktion bruges til at læse det formaterede input fra den givne stream på C-sproget.
Syntaks:
int fscanf(FILE *ptr, const char *format, ...)>
fscanf læser fra en fil, der peges af FILE-markøren (ptr), i stedet for at læse fra inputstrømmen.
Returværdi: Det returnerer nul eller EOF, hvis det ikke lykkes. Ellers returnerer det antallet af varer, der er blevet tildelt.
Tidskompleksitet: På)
Hjælpeplads: O(n) hvor n er længden af input.
prioriteret kø
Eksempel 1: Overvej følgende tekstfil abc.txt
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Nu vil vi kun læse byfeltet i ovenstående tekstfil og ignorere alle de andre felter. En kombination af fscanf og tricket nævnt ovenfor gør dette med lethed
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; }> Produktion
CITY hyderabad delhi bangalore>
Eksempel 2: Overvej følgende binære fil program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
For at læse alle værdier af n1, n2 & n3 i bin, bruger vi 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> Produktion
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
Lad os se forskellene i en tabelform -:
| scanf() | fscanf() | |
| 1. | Det bruges til at læse standard input. | Denne funktion bruges til at læse input fra en fil |
| 2. | Dens syntaks er -: scanf(const char *format, …) java få aktuel tid | Dens syntaks er -: fscanf(FIL *stream, const char *format, …) |
| 3. | Det kræver formatspecifikationer at tage input af en bestemt type. | Den læser strømmen i form af byte |
| 4. | Det kræver tre parametre, der er -: Whitespace-tegn, Ikke-whitespace-tegn, Formatspecifikationer | Det er defineret i header-filen #include |