aun que sus instruciones no son tan claras, pra mi eso funciona
ese codigo tiene varias complicaciones que no son necesarios, pero eso funciona. yo le recomendaria a hacerlo de nnuevo, y poner algo como
if n == X
suma = 10
if n == I
suma = 1
if memcmp(n, "XX", 2) == 0
suma = 20
etc
suerte
ese codigo tiene varias complicaciones que no son necesarios, pero eso funciona. yo le recomendaria a hacerlo de nnuevo, y poner algo como
if n == X
suma = 10
if n == I
suma = 1
if memcmp(n, "XX", 2) == 0
suma = 20
etc
suerte
Código [Seleccionar]
#include <stdio.h>
char n;
int suma=0;
int a;
int b;
int main () {
printf("Escribe un numero en romano \n");
scanf("%c",&n);
if (n=='I' || n=='V' || n=='X' || n=='L' || n=='C' || n=='D' || n=='M' || n=='\n')
{
// tiene que sacar eso, porque ese condicion va a ser infinito y no es nesecario
//while (n!='\n')
//{
if (n=='I') {
a=1;
// a que refiere con "b"? b no tiene valor... seria mejor
// y menos codigo a simplamente escribir " suma = 1 "
if(b<a)
{
// aun que en ASM no tiene mucha diferencia, en C es mejor escribalo asi
// suma=suma+(a-b);
suma += (a - b)
}
else { suma=suma+(a+b);}
}
if (n=='V') {
a=5;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='X') {
a=10;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='L') {
a=50;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='C') {
a=100;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='D') {
a=500;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
if (n=='M') {
a=1000;
if(b<a) { suma=suma+(a-b); }
else { suma=suma+(a+b); }
}
b=a;
scanf("%n",&n);
// }
}
else {
fprintf(stderr,"ERROR: El numero introducido no es correcto \n");
return -1;
}
printf("Este es el numero: %i",suma);
return 0;
}