Cita de: m@o_614 en 22 Agosto 2013, 01:19 AMpor fin pude encontrar el error, estaba en el puntero del segundo for, cada vez que entraba de nuevo al 2do ciclo el puntero no se reiniciaba a la primera posicion, pero ya lo pude corregirAlgunos comentarios sobre ese programa:
* Faltan los encabezados.
* Si vas a imprimir una cadena en la salida estándar y esta no termina con el carácter '\n' debes vaciar su bufer de forma explicita mediante la llamada "fflush(stdout);".
* No utilices gets, la razón de ello se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.
* Para terminar la función principal no es necesario llamar a la función exit, puedes utilizar la sentencia "return N;" con el mismo efecto.
Por ultimo como ya comento eferion se puede utilizar la función strchr (prototipo en <string.h>) para acortar el programa a un solo bucle. Mas o menos así:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_CHARS 7
int main(void)
{
char num[NUM_CHARS];
int i;
printf("Dame el primer numero: ");
fflush(stdout);
if (fgets(num, NUM_CHARS, stdin) == NULL)
return EXIT_FAILURE;
for (i = 0; strchr("IVXLCDM", num[i]) != NULL; i++)
;
if (i > 0 && (num[i] == '\n' || num[i] == '\0'))
puts("OK");
else
puts("Entrada no valida");
return EXIT_SUCCESS;
}
Con la limitante de indicar una entrada no valida si la linea empieza con espacio blanco.
Otra opción consiste en sustituir el bucle basado en strchr por una llamada a strspn.
Un saludo