-
-
Save phaya/1abd04c09ee35024576c to your computer and use it in GitHub Desktop.
El siguiente programa funciona incorrectamente ya que nunca llega a pedir el nombre, en cambio si cambiamos el orden en que se piden los datos al usuario (primero el nombre y luego la fecha) si que funciona ¿por qué? ¿cómo solucionarías el problema sin cambiar el orden? Además, ¿qué función emplearías para eliminar la insegura y peligrosa `gets`?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int main() { | |
int age; | |
char name[30]; | |
printf("How old are you? "); | |
scanf("%d", &age); | |
printf("What's your name? "); | |
gets(name); | |
printf("Hi %s! You're %d years old", name, age); | |
return 0; | |
} |
Es gets el que se lo traga todo.
¡Bien, bien! He realizado un post http://pablohaya.com/2013/10/12/diferencia-entre-scanf-gets-y-fgets/ con una descripción más detallada entre las diferencias entre scanf, gets y fgets. También se propone una solución alternativa a las que habéis dado.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
El problema es que gets lee las cadenas sin formato, mientras que scanf las lee con formato. Así scanf lee la entrada y convierte a entero la cadena que le entra, ovbiando el intro que acompaña al número que hemos tecleado para la edad. Pero scanf se lo traga ya que no distingue el tipo que le entra. Podríamos intentar solucionarlo de varias manera. Una es declarar una variable char para leer el intro y declararla en el scanf ("%d,%c", &age, leeintro); otra sería hcer dos lecturas con gets y otra sería implementar una condición. if(gets(name)==/0) printf(leido intro) else gets(name)