En langage C, scanf() La fonction est utilisée pour lire les entrées formatées à partir de stdin. Il renvoie le nombre entier de caractères qui y sont écrits, sinon renvoie une valeur négative.
Syntaxe:
int scanf(const char *characters_set)>
Complexité temporelle : Sur)
Espace auxiliaire : O(n) où n est la longueur de l'entrée.
Beaucoup d’entre nous connaissent les utilisations traditionnelles de scanf. Eh bien, voici quelques-uns des faits les moins connus
CSS centrant une image
Comment lire seulement une partie de l’entrée dont nous avons besoin ?
Par exemple, considérons un flux d'entrée contenant uniquement des caractères suivis d'un entier ou d'un flottant. Et nous devons analyser uniquement cet entier ou ce flottant.
Exemple:
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>
Supposons maintenant que nous ne savons pas quels sont les caractères précédents mais que nous savons sûrement que la dernière valeur est un entier. Comment pouvons-nous scanner la dernière valeur sous forme d’entier ?
La solution ci-dessous ne fonctionne que si la chaîne d'entrée ne contient aucun espace. Par exemple,
Saisir
'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; }> Sortir
Input Value read : 25>
Explication : Le %*s dans scanf est utilisé pour ignorer certaines entrées si nécessaire. Dans ce cas, il ignore l'entrée jusqu'au prochain espace ou nouvelle ligne. De même, si vous écrivez %*d, il ignorera les entiers jusqu'au prochain espace ou nouvelle ligne.
Utilisation générale de scanf( ) :
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Saisir
2>
Sortir
a = 2>
Le fait ci-dessus peut ne pas sembler être une astuce utile à première vue. Afin de comprendre son utilisation, voyons d’abord fscanf().
Fonction fscanf en C
Fatigué de toute la syntaxe maladroite à lire à partir de fichiers ? eh bien, fscanf vient à la rescousse. Cette fonction est utilisée pour lire l'entrée formatée du flux donné dans le langage C.
Syntaxe:
eol en python
int fscanf(FILE *ptr, const char *format, ...)>
fscanf lit à partir d'un fichier pointé par le pointeur FILE (ptr), au lieu de lire à partir du flux d'entrée.
Valeur de retour : Il renvoie zéro ou EOF en cas d'échec. Sinon, il renvoie le nombre d'éléments attribués avec succès.
Complexité temporelle : Sur)
Espace auxiliaire : O(n) où n est la longueur de l'entrée.
Exemple 1: Considérez le fichier texte suivant abc.txt
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Maintenant, nous voulons lire uniquement le champ ville du fichier texte ci-dessus, en ignorant tous les autres champs. Une combinaison de fscanf et de l'astuce mentionnée ci-dessus permet de le faire facilement
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; }> Sortir
CITY hyderabad delhi bangalore>
Exemple 2 : Considérez le fichier binaire suivant program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
Pour lire toutes les valeurs de n1, n2 et n3 du bin, nous utilisons 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> Sortir
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
Voyons les différences sous forme de tableau - :
| scanf() | fscanf() | |
| 1. | Il est utilisé pour lire l’entrée standard. | Cette fonction est utilisée pour lire l'entrée d'un fichier |
| 2. | Sa syntaxe est - : scanf(const char *format, …) | Sa syntaxe est - : fscanf(FILE *flux, const char *format, …) |
| 3. | Cela nécessite que les spécificateurs de format acceptent une entrée d'un type particulier. | Il lit le flux sous forme d'octet |
| 4. | Il faut trois paramètres qui sont - : Caractère d'espacement, Caractère autre qu'un espace, Spécificateurs de format comment fonctionne un ordinateur | Il est défini dans le fichier d'en-tête #include |