Leer de la entrada estandar linea por linea

Iniciado por Delraich, 5 Julio 2010, 23:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Delraich

Muchas gracias czealt, eso es justamente lo q necesitaba! xD.. De nuevo muchas gracias a todos, y espero dentro de poco poder ayudarlos yo a ustedes

Littlehorse

czealt, recuerda que utilizar fflush con stdin invoca comportamiento indefinido.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

misterharry

Cita de: Littlehorse en  6 Julio 2010, 03:14 AM
czealt, recuerda que utilizar fflush con stdin invoca comportamiento indefinido.

Saludos

D: porque??? que es lo que hace para inestabilizar el comportamiento???
perdon la ignarancia pero me llama la atencion esto

do-while

Aqui explica porque hay que utilizar fflush con sdtin, y otras muchas cosas que pueden dar problemas si no se manejan con cuidado.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

misterharry

jaja justo venia desde ese post (y muchos mas) donde esplican porke no debe usarse

gracias de todos modos. :D

bueno, jamas habia usado fflush para algo distinto de vaciar stdin. de hecho pense que para eso era..
no entiendo bien para que se ocupa reamlmete, visite cconclase para salir de la duda pero quede peor xD
onda, por un post lei que era para forzar la escritura y no para liberarla o algo asi :S

MIG80

#15
Cita de: Littlehorse en  6 Julio 2010, 03:14 AM
czealt, recuerda que utilizar fflush con stdin invoca comportamiento indefinido.

Saludos

Bueno, reemplazando la línea fflush(stdin), el código corregido seria:


int leer3ent(int *c1,int *c2,int *c3)
{
 int res,lon_ent;
 char remanente[1000],lineaentrada[1000];
 
 fgets(lineaentrada,1000,stdin);
 lon_ent=strlen(lineaentrada);
 if(lon_ent)
 {
   if(lineaentrada[lon_ent-1]!='\n')
   {
     while(getchar()!='\n')
     ;
   }
 }
 res=sscanf(lineaentrada,"%u %u %u%s",c1,c2,c3,remanente);
 return (res==3)?1:0;
}

int LeerLado(EstadoNetwork n)
{
 res=leer3ent(&c1,&c2,&c3);
 if(res==3)
   res=CargarLado(n->network,c1,c2,c3);
 else
   res=0;
 return res;
}



a partir de ahora recordare no usar fflush(stdin), gracias por la información.

Saludos.