sé que la firma es¿Qué función scanf en c devuelve?
int scanf(const char *format, ...)
Para lo que este valor int está relacionado?
sé que la firma es¿Qué función scanf en c devuelve?
int scanf(const char *format, ...)
Para lo que este valor int está relacionado?
Desde la página 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.
En su caso, puede volver scanf()
0
, 1
o EOF
.
P.S. Como otros han señalado, su faltan un símbolo de unión frente a g
:
int p=scanf("%d",&g);
Sin el signo, el comportamiento de su código no está definido.
['scanf()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/ scanf.html) devuelve la cantidad de elementos escaneados con éxito a nd asignado. Si la cadena de formato es '"% s% d% f% * s% n% d "', devuelve 4 si todo funciona.El '% * s' suprime la asignación por lo que no se cuenta y el'% n' devuelve un desplazamiento y no se cuenta. Si obtienes 0, 1, 2 o 3, algo salió mal. Solo recuperará EOF si no quedan datos por leer, o si hay un error de entrada (no es un error de formato, sino un error de 'hardware'). Con un formato '"% d "', solo hay una conversión, por lo que obtendrás 'EOF',' 0' o '1'. –
De scanf:
En caso de éxito, la función devuelve el número de elementos leído correctamente. Este recuento puede coincidir con el número esperado de lecturas o menos, incluso cero, si ocurre una falla coincidente. En el caso de una falla de entrada antes de que cualquier dato pueda leerse con éxito, se devuelve EOF.
creo que su código no funcionará correctamente porque se le olvida la "&" en la función scanf ..
int g=0; //init the variable
int p=scanf("%d",&g);
la función scanf pondrá el valor introducido a la dirección de la variable g.
¿Por qué crees que la variable debe inicializarse? –
Técnicamente esto es UB (comportamiento indefinido).
int g;
int p=scanf("%d",g);
^
Está pasando un número entero unitario a scanf para usarlo como una dirección para escribir. A partir de este punto, cualquier cosa puede suceder. Lo más probable es que tu aplicación se bloquee.
Lo que le dará la entrada en el VDU va a la variable g
y si se lee con éxito, p
es igual a 1.
devolverá 1 como scanf devuelve el número de elementos leído correctamente
sólo Google 'retorno valor de scanf'. Obtendrá tantos enlaces con la respuesta, incluidas algunas publicaciones de SO. –
Es posible que la función ni siquiera vuelva. Tal vez quiso decir 'int p = scanf ("% d ", &g);'? – wildplasser
Su código es incorrecto. Debe ser 'int p = scanf ("% d ", &g);' por lo que es un comportamiento indefinido. – Flexo