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?
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
.
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é.
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.
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.
il renverra 1 car scanf renvoie le nombre d'éléments lus avec succès
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.