Siemanko, czemu program zamienia każdą cyfrę osobno, nie uwzględnia ciągu znaków które tworzą cyfrę.
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <conio.h>
void changeToRoman(int a)
{
int s;
int d;
int j;
int t;
int plik2;
plik2 = open("liczbyRzymskie.txt",O_WRONLY|O_APPEND);
if(plik2 == -1)
{
perror("Blad otwarcia pliku!");
exit(1);
}
if(a!=0)
{
j = a%10;
d = (a/10)%10;
s = a/100;
t = a/1000;
switch(t)
{
case 1: write (plik2,"M",1); break;
case 2: write (plik2,"MM",2); break;
case 3: write (plik2,"MMM",3); break;
}
switch(s)
{
case 1: write (plik2,"C",1); break;
case 2: write (plik2,"CC",2); break;
case 3: write (plik2,"CCC",3); break;
case 4: write (plik2,"CD",2); break;
case 5: write (plik2,"D",1); break;
case 6: write (plik2,"DC",2); break;
case 7: write (plik2,"DCC",3); break;
case 8: write (plik2,"DCCC",4); break;
case 9: write (plik2,"CM",2); break;
}
switch(d)
{
case 1: write (plik2,"X",1); break;
case 2: write (plik2,"XX",2); break;
case 3: write (plik2,"XXX",3); break;
case 4: write (plik2,"XL",2); break;
case 5: write (plik2,"L",1); break;
case 6: write (plik2,"LX",2); break;
case 7: write (plik2,"LXX",3); break;
case 8: write (plik2,"LXXX",4); break;
case 9: write (plik2,"XC",2); break;
}
switch(j)
{
case 1: write (plik2,"I",1); break;
case 2: write (plik2,"II",2); break;
case 3: write (plik2,"III",3); break;
case 4: write (plik2,"IV",2); break;
case 5: write (plik2,"V",1); break;
case 6: write (plik2,"VI",2); break;
case 7: write (plik2,"VII",3); break;
case 8: write (plik2,"VIII",4); break;
case 9: write (plik2,"IX",2); break;
}
write (plik2," ",1);
close(plik2);
}
}
int main()
{
int plik;
int l;
char znak[1];
plik = open("liczbyArabskie.txt", O_RDONLY);
if(plik == -1)
{
perror("Blad otwarcia pliku!");
exit(1);
}
int size = 0;
while((size=read(plik, znak, 1))>0)
{
l = atoi(znak);
if(l > 0)
{
changeToRoman(l);
}
}
int i=0;
scanf("%c", &i);
return 0;
}