På C-språk, scanf() funktionen används för att läsa formaterad indata från stdin. Den returnerar hela antalet tecken som skrivits i den annars, returnerar ett negativt värde.
Syntax:
int scanf(const char *characters_set)>
Tidskomplexitet: På)
Hjälputrymme: O(n) där n är längden på inmatningen.
Många av oss känner till den traditionella användningen av scanf. Tja, här är några av de mindre kända fakta
lexikografisk ordning
Hur läser man bara en del av den input som vi behöver?
Tänk till exempel på en indataström som bara innehåller tecken följt av ett heltal eller en flytande. Och vi behöver bara skanna det heltal eller float.
Exempel:
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 att vi inte vet vad de föregående tecknen är men vi vet säkert att det sista värdet är ett heltal. Hur kan vi skanna det sista värdet som ett heltal?
Lösningen nedan fungerar endast om inmatningssträngen inte har några mellanslag. Till exempel,
Inmatning
'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>
Förklaring : %*s i scanf används för att ignorera viss inmatning efter behov. I det här fallet ignorerar den inmatningen tills nästa mellanslag eller nyrad. På liknande sätt, om du skriver %*d kommer det att ignorera heltal tills nästa mellanslag eller nyrad.
Allmän användning av scanf( ):
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Inmatning
2>
Produktion
a = 2>
Ovanstående faktum kanske inte verkar vara ett användbart knep vid första anblicken. För att förstå dess användning, låt oss först se fscanf().
fscanf-funktion i C
Trött på all klumpig syntax att läsa från filer? ja, fscanf kommer till undsättning. Denna funktion används för att läsa den formaterade inmatningen från den givna strömmen på C-språket.
Syntax:
int fscanf(FILE *ptr, const char *format, ...)>
fscanf läser från en fil som pekas av FILE-pekaren (ptr), istället för att läsa från inmatningsströmmen.
Returvärde: Den returnerar noll eller EOF, om den misslyckas. Annars returnerar den antalet artiklar som har tilldelats.
Tidskomplexitet: På)
Hjälputrymme: O(n) där n är längden på ingången.
hashset java
Exempel 1: Tänk på följande textfil abc.txt
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Nu vill vi bara läsa stadsfältet i textfilen ovan och ignorera alla andra fält. En kombination av fscanf och tricket ovan gör detta med lätthet
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>
Exempel 2: Tänk på följande binära fil program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
För att läsa alla värden på n1, n2 & n3 i bin, använder 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>
Låt oss se skillnaderna i tabellform -:
| scanf() | fscanf() | |
| 1. | Den används för att läsa standardinmatning. | Denna funktion används för att läsa indata från en fil |
| 2. | Dess syntax är -: scanf(const char *format, …) hur man konverterar str till int | Dess syntax är -: fscanf(FIL *ström, const char *format, …) |
| 3. | Det kräver att formatspecifikationerna tar indata av en viss typ. | Den läser strömmen i form av byte |
| 4. | Det krävs tre parametrar som är -: Blanktecken , Icke-blankstegstecken, Formatspecifikationer | Det definieras i rubrikfilen #include |