Soy bastante nuevo en C y tengo un problema al ingresar datos en el programa.Entrada en C. Scanf before gets. Problema
Mi código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int a;
char b[20];
printf("Input your ID: ");
scanf("%d", &a);
printf("Input your name: ");
gets(b);
printf("---------");
printf("Name: %s", b);
system("pause");
return 0;
}
Permite ID de entrada, pero sólo se salta el resto de la entrada. Si cambio el orden como este:
printf("Input your name: ");
gets(b);
printf("Input your ID: ");
scanf("%d", &a);
Funcionará. Aunque, NO PUEDO cambiar el orden y lo necesito tal como está. Alguien me puede ayudar ? Tal vez necesito usar algunas otras funciones. ¡Gracias!
obtiene (3): "El gets() función no se puede utilizar de forma segura Debido a su falta de comprobación de límites, y la incapacidad para el programa que llama a. confiablemente determinar la longitud de la siguiente línea entrante, el uso de esta función permite a los usuarios malintencionados cambiar arbitrariamente la funcionalidad de un programa en ejecución a través de un ataque de desbordamiento de búfer. Se recomienda que se use la función fgets() en todo c ases. (Consulte la FSA). " No lo use. –
Más brevemente: Si usa' gets', volando ocelos de ataque rabioso se rasgará los ojos. Así que no. –
'scanf' es ** evil * * - http://c-faq.com/stdio/scanfprobs.html – jschmier