Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/06/2011, 09:15
Amphoth3ra
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años, 7 meses
Puntos: 1
fgets me guarda una línea innecesaria

Estoy practicando un poco de fgets con cadenas y me he encontrado con algo bastante extraño, que consiste en que las cadenas que yo entrego de entrada, me salen correctas, pero me salen con una línea de más.

Les explico con código en mano. Esta aplicación pretende guardar en una estructura temporal cuatro datos
1) El nombre de un DVD
2) El género de un DVD
3) El número de discos de un DVD
4) La duración total del DVD en minutos

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. struct dvd {
  6.  char name[255];
  7.  char genero[50];
  8.  int discs_number;
  9.  int length;
  10. };
  11.  
  12. int main()
  13. {
  14.     struct dvd temporal;
  15.  
  16.     char discs_number[2];
  17.     char length[4];
  18.  
  19.     printf("Nombre del DVD\n");
  20.              fgets(temporal.name, 255, stdin);
  21.  
  22.     printf("%s\n", temporal.name);
  23.  
  24.     printf("Género del DVD\n");
  25.             fgets(temporal.genero, 50, stdin);
  26.  
  27.     printf("%s\n", temporal.genero);
  28.  
  29.     printf("Número de discos del DVD\n");
  30.              fgets(discs_number, 2, stdin);
  31.  
  32.     temporal.discs_number = atoi(discs_number);
  33.  
  34.     printf("%d\n", temporal.discs_number);
  35.  
  36.     printf("Duración del DVD\n");
  37.        
  38.     while(getchar() != '\n');
  39.             fgets(length, 4, stdin);
  40.  
  41.     temporal.length = atoi(length);
  42.    
  43.     printf("%d\n", temporal.length);
  44.  
  45.    
  46.  
  47.     return(0);
  48. }

Cuando ejecuto el programa, si introducen el nombre del DVD, la cadena que se me regresa es correcta cuando yo haga el printf, pero automáticamente se me salta una línea. Lo mismo pasa con el género del DVD.

Los campos de número de discos y de duración del DVD funcionan correctamente.

Pruébenlo con estos datos:
Nombre: Batman
Género: Acción
Número de discos: 1
Duración; 126

¿Que puede estar pasando? (por cierto, mi código está compilado con GCC)

Saludos!