Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/09/2009, 23:11
JuanLVBR
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Error con scanf

Yo también soy partidario de que el código no tenga warnings, porque para algo están... De hecho si tuvieses un compilador de C puro no sólo te saldrían warnings ahí, por ejemplo el comentario de línea en C no se debe hacer así, el main ha de ser int (porque al main se le puede llamar desde otro sitio e interesa saber si ha finalizado bien)...

En cuanto al warning del gets( ) es evidente, no es nada recomendado usarla, si le echas un vistazo al código de verás por qué... De qué te sirve declarar un vector a y un vector b de X espacio si el gets se lo va a saltar a la torera... Para eso declaramos uno dinámico y vamos aumentándolo nosotros... Prueba a meter más carácteres y verás que te los imprime igual. Pero bueno, si es para una aplicación de andar por casa puedes hacer lo que te salga, como si lo llenas de gotos o breaks, allá cada cual con lo que haga.

Poniéndolo así no tendrás el problema de los apellidos, no te saltarán warnings y te evitas el gets( ):
Código c:
Ver original
  1. /*Máximo de carácteres del nombre o apellidos.*/
  2. #define MAX_CAR     20
  3.  
  4. #include<stdio.h>
  5. /*Incluyo conio.h porque en este foro os encanta usar getch() al final pero bue xD.*/
  6. #include<conio.h>
  7.  
  8. int main(){
  9.     char a[MAX_CAR], b[MAX_CAR];
  10.     int i;
  11.    
  12.     printf("Nombre: ");
  13.     i=-1;
  14.     do{
  15.         ++i;
  16.         a[i] = getchar();
  17.     }while(a[i]!='\n' && i<MAX_CAR);
  18.     fflush(stdin);
  19.     a[i]='\0';
  20.    
  21.     printf("Apellido: ");
  22.     i=-1;
  23.     do{
  24.         ++i;
  25.         b[i] = getchar();
  26.     }while(b[i]!='\n' && i<MAX_CAR);
  27.     fflush(stdin);
  28.    
  29.     b[i]='\0';
  30.     printf("El Nombre es: %s %s \n", a, b);
  31.     getch();
  32.     return 0;
  33. }

Como ves la recogida del nombre y los apellidos es exactamente lo mismo, así que podriámos llamar a una función leeCadena(a, MAX_CAR);