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#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int validar_num(char numero[50]);
int validar_cadena(char nombre[50]);
int main (void)
{
char numero[50], nombre[50];
int sw;
printf("ingrese un numero: "); fgets(numero
, 50, stdin
); sw = validar_num(numero);
if (sw == 0)
printf("el numero es valido\n"); else
printf("el numero no es valido\n"); printf("introduce un nombre\n"); fgets(nombre
, 50, stdin
); sw = validar_cadena(nombre);
if (sw == 0)
printf("el nombre es correcto\n"); else
printf("el nombre es incorrecto\n"); return 0;
}
int validar_num(char numero[50])
{
int i = 0 ;
for (i
=0;i
<strlen(numero
)-1;i
++) return 1;
return 0;
}
int validar_cadena(char nombre[50])
{
int i = 0;
for (i
=0;i
<strlen(nombre
)-1;i
++) return 1;
return 0;
}
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.