logo

scanf() och fscanf() i C

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