Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Gets C

Estas en el tema de Gets C en el foro de C/C++ en Foros del Web. Buenas Noches^^ soy nuevo en el foro, y siento que es un foro especial para resolver dudas y no para realizar todo el trabajo... pero ...
  #1 (permalink)  
Antiguo 27/10/2009, 20:34
 
Fecha de Ingreso: octubre-2009
Mensajes: 8
Antigüedad: 14 años, 6 meses
Puntos: 0
Gets C

Buenas Noches^^ soy nuevo en el foro, y siento que es un foro especial para resolver dudas y no para realizar todo el trabajo... pero bueno mi duda es la siguiente... Estoy haciendo un programa que lea "n"numero de personas para despues ingresarlos y desplegarlos en una lista... pero al momento de utilizar gets me pide instantaneamente los nombres de las 2 primeras personas y después efectua el for sin problemas... alguien sabe el porque?? ya busqué el porqué pero no encuentro muchas respuestas.... De antemano muchas gracias ^^


#include <stdio.h>

int main(){

char **nombre;
int num_nombres, i;

printf("Numero de personas: ");
scanf("%d",&num_nombres);
nombre = malloc (num_nombres * sizeof(char));
//char nombre[num_nombres][30]={};

for (i=0; i<num_nombres; i++){
nombre[i] = malloc (30 * sizeof(char));
printf("Nombre de la persona %d", i+1);
gets(nombre[i]);
}

printf("\n\nNombres ingresados\n\n");
for (i=0; i<num_nombres; i++){
printf("%s\n", nombre[i]);
}
fflush(stdin);
getchar();
return(0);
}
  #2 (permalink)  
Antiguo 28/10/2009, 09:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Gets C

El problema esta en usar scanf, si usas fgets (con stdin) y sscanf te funcionara, igual es mejor usar fgets que gets asi podes especificar el tamaño del buffer en cuestion. Usando estas funciones no tendras que recurrir a fflush para flujos de entrada (su funcionamiento en ese caso esta indeterminado).

Ejemplo:

Código:
char input[80];
fgets(input, sizeof(input), stdin);
sscanf(input, "%d", &num_nombres);
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:27.