2009-11-29 11 views
5

En el siguiente código de C:¿Scanf() toma ' n' como entrada sobrante del scanf anterior()?

char name[20]; 
int a; 
int b; 

for(i=0;i<10;i++) 
{ 
    printf("\nEnter name, a & b: "); 
    scanf("%s %d %d",name,&a,&b); 
} 

hace scanf de lectura en el '\n' entró al final de scanf() en primera iteración, para las entradas 2ª iteración?

+2

¿Por qué no intenta ejecutar este código a través de un depurador y ver qué pasa? Entonces, si es inesperado o poco claro, publica una pregunta sobre ese aspecto. – ChrisF

Respuesta

5

scanf sale del flujo de entrada que apunta al \n. En su caso, no hace la diferencia: cada vez que se invoca, scanf avanzará hasta que encuentre el siguiente carácter que no sea de espacio en blanco. Así que darle 10 líneas de name, a, b como entrada funcionará como esperaba.

Pero considere esto:

scanf("%d", &a); 
fgets(str, 20, stdin); 

fgets lee hasta que encuentra el primer carácter de nueva línea, por lo str acaba de obtener un valor de \n y fgets se no leer la siguiente línea de entrada.