2012-05-06 27 views
16

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?

+2

sólo Google 'retorno valor de scanf'. Obtendrá tantos enlaces con la respuesta, incluidas algunas publicaciones de SO. –

+7

Es posible que la función ni siquiera vuelva. Tal vez quiso decir 'int p = scanf ("% d ", &g);'? – wildplasser

+3

Su código es incorrecto. Debe ser 'int p = scanf ("% d ", &g);' por lo que es un comportamiento indefinido. – Flexo

Respuesta

28

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.

+0

['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'. –

8

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.

0

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.

+3

¿Por qué crees que la variable debe inicializarse? –

1

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.

0

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.

1

devolverá 1 como scanf devuelve el número de elementos leído correctamente

Cuestiones relacionadas