web-dev-qa-db-fra.com

Que renvoie la fonction scanf?

Je sais que la signature de la fonction scanf est:

int scanf(const char *format, ...)

Quelle est la valeur int renvoyée par cette fonction?

23
Rachit

Depuis la page man:

NAME
       scanf,  fscanf, sscanf, vscanf, vsscanf, vfscanf 

       ...

RETURN VALUE
       These functions return the number of input items  successfully  matched
       and assigned, which can be fewer than provided for, or even zero in the
       event of an early matching failure.

       The value EOF is returned if the end of input is reached before  either
       the  first  successful conversion or a matching failure occurs.  EOF is
       also returned if a read error occurs, in which case the error indicator
       for  the  stream  (see ferror(3)) is set, and errno is set indicate the
       error.

Dans votre cas, scanf() peut renvoyer 0, 1 Ou EOF.

40
NPE

De scanf :

En cas de succès, la fonction renvoie le nombre d'éléments lus avec succès. Ce nombre peut correspondre au nombre attendu de lectures ou moins, voire zéro, si un échec de correspondance se produit. En cas d'échec d'entrée avant que les données puissent être lues avec succès, EOF est retourné.

8
gliderkite

Techniquement, c'est UB (comportement indéfini).

int g;
int p=scanf("%d",g);
                 ^

Vous passez un entier unitaire à scanf pour l'utiliser comme une adresse à écrire. À partir de ce moment, tout peut arriver. Il est fort probable que votre application va planter.

1
Karoly Horvath

Je pense que votre code ne fonctionnera pas correctement car vous oubliez le "&" dans la fonction scanf ..

int g=0; //init the variable
int p=scanf("%d",&g);

la fonction scanf mettra la valeur entrée à l'adresse de la variable g.

0
M.J.Ahmadi

il renverra 1 car scanf renvoie le nombre d'éléments lus avec succès

0
Taranjeet

Tout ce que vous donnerez dans l'entrée VDU va à la variable g et s'il est lu avec succès, p est égal à 1.

0
Shubham Nigam