Chunche95

En relación a distintas cuestiones sobre ejemplos que no funcionan o no se detienen como se espera en el uso del procedimiento scanf() es necesario conocer el siguiente comentario relacionado con la forma de funcionar de este procedimiento: Cuando usamos la función scanf(), no leemos directamente desde el teclado, sino que lo hacemos en una memoria intermedia (lo que se llama un buffer).
En determinadas operaciones de lectura este buffer queda con restos y por lo tanto los datos se quedan en el buffer y son procesados inmediatamente por el siguiente.
La solución es usar la función fflush antes del scanf(), pertenece al mismo módulo stdio.h. Esta función limpia el buffer y así evita que los restos provoquen errores no esperados.
Por ejemplo:

                                            
int mes; char propiedad; printf("Di el mes de la construcción: "); scanf("%d",&mes); printf("¿Es propiedad? (S/N) "); scanf("%c", &propiedad);
Podemos observar que el segundo "scanf" que debería detenerse para esperar un SI (S) o un NO (N), no lo hace. El carácter "intro" del scanf de leer el valor mes se queda en el buffer y se vacía sobre el segundo scanf().
Para evitar esto podemos forzar el vaciado del buffer.
                                                
int mes; char propiedad; printf("Di el mes de la construcción: "); scanf("%d",&mes); fflush(stdin); printf("¿Es propiedad? (S/N) "); scanf("%c", &propiedad);