Ver Mensaje Individual
  #13 (permalink)  
Antiguo 18/02/2014, 08:34
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: como sustituir la funcion fgets y gets en c

El origen del problema radica en que fgets introduce un '\n' al final de la cadena, por lo que has de tomar la longitud menos el retorno.

Funcionando:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6.  int validar_num(char numero[50]);
  7.  int validar_cadena(char nombre[50]);
  8.  
  9. int main (void)
  10. {
  11.   char numero[50], nombre[50];
  12.   int sw;
  13.   printf("ingrese un numero: ");
  14.   fgets(numero, 50, stdin);
  15.   sw = validar_num(numero);
  16.   if (sw == 0)
  17.     printf("el numero es valido\n");
  18.   else
  19.     printf("el numero no es valido\n");
  20.   printf("introduce un nombre\n");
  21.   fgets(nombre, 50, stdin);
  22.   sw = validar_cadena(nombre);
  23.   if (sw == 0)
  24.   printf("el nombre es correcto\n");
  25.   else
  26.     printf("el nombre es incorrecto\n");
  27.  return 0;
  28.  }
  29.  
  30.  int validar_num(char numero[50])
  31.  {
  32.  int i = 0 ;
  33.  for (i=0;i<strlen(numero)-1;i++)
  34.    if (isdigit(numero[i]) ==0)
  35.     return 1;
  36.  return 0;
  37.  }
  38.  
  39. int validar_cadena(char nombre[50])
  40.  {
  41.    int i = 0;
  42.    for (i=0;i<strlen(nombre)-1;i++)
  43.      if (isalpha(nombre[i]) == 0)
  44.         return 1;
  45.    return 0;
  46.  }

Por cierto, a ver si nos acostumbramos indentar o sangrar o tabular los códigos si no se hacen ilegibles.

Y otra cosita, cuando un for, else o similar se reduce a una sola instrucción, no hace falta ponerles llaves, así no recargas el código.

Te he cambiado los while por for porque en este caso me parece más razonable conociendo el valor inicial y final.