Witam! Mam problem. Wracam do c po krótszej przerwie i nie potrafię stworzyć drugiej funkcji. Działa mi zamiana liczb arabskich na rzymskie natomiast na odwrót (wArab) juz nie. Czy ktoś byłby w stanie mi pomóc?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct RZYM{
int arab;
char *rzym;
} rz[] = {
{1000, "M"},
{900, "CM"},
{500, "D"},
{400, "CD"},
{100, "C"},
{90, "XC"},
{50, "L"},
{40, "XL"},
{10, "X"},
{9, "IX"},
{5, "V"},
{4, "IV"},
{1, "I"}
};
char *wRZYM(int n)
{
char *rzymskie;
int i=0;
rzymskie = (char *) malloc(sizeof(char) * 10);
while (n){
while (n<rz[i].arab)
i++;
while (n >= rz[i].arab)
{
strcat(rzymskie, rz[i].rzym);
n -= rz[i].arab;
}
}
return rzymskie;
}
char *wARAB(char m)
{
char *arabskie;
int j=0;
arabskie = (char *) malloc(sizeof(char) * 10);
while (m) {
while (m<rz[j].rzym)
j++;
while (m >= rz[j].rzym)
{
strcat(arabskie, rz[j].arab);
m -= rz[j].rzym;
}
}
return arabskie;
}
int main (int argc, char const *argv[])
{
int liczba;
char *wynik;
printf("Wpisz liczbe w postaci arabskiej: \n");
scanf("%d", &liczba);
if (liczba < 0 || liczba > 3999){
printf("Liczba moze byc jedynie w zakresie od 1 do 3999");
return -1;
}
wynik = wRZYM(liczba);
puts(wynik);
free(wynik);
return 0;
}