Hi all
I've only been learning C for 6 weeks and have a project to convert arabic numbers to roman numerals.
Part of the prgram must do this in batch mode. i.e. read integers from .txt file, convert and write numerals back to .txt file.
It seems to be working ok, however the ouput is mixed up.
Reading integers from .txt file as follows:
-------------------------------------------------
1
4
10
-------------------------------------------------
When converted and appended back to the file I get:
-------------------------------------------------
1
4
10
The value: 10 = X
The value: 1 = I
The value: 4 = IV
-------------------------------------------------
So it is appending the last integer first, then the rest.
It is obviously something I am doing wrong in the loop at the end.
Can anyone advise me please?
Code follows:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void convert(int, char); //declaration of function to convert numerals
void convert(int value, char roman[50])
{
while (value >= 1000)
{
strcat (roman, "M");
value -= 1000;
}
if (value >= 900)
{
strcat (roman, "CM");
value -= 900;
}
while (value >= 500)
{
strcat (roman, "D");
value -= 500;
}
if (value >= 400)
{
strcat (roman, "CD");
value -= 400;
}
while (value >= 100)
{
strcat (roman, "C");
value -= 100;
}
if (value >= 90)
{
strcat (roman, "XC");
value -= 90;
}
while (value >= 50)
{
strcat (roman, "L");
value -= 50;
}
if (value >= 40)
{
strcat (roman, "XL");
value -= 40;
}
while (value >= 10)
{
strcat (roman, "X");
value -= 10;
}
if (value >= 9)
{
strcat (roman, "IX");
value -= 9;
}
while (value >= 5)
{
strcat (roman, "V");
value -= 5;
}
if (value >= 4)
{
strcat (roman, "IV");
value -= 4;
}
while (value > 0)
{
strcat (roman, "I");
value -= 1;
}
}
int main ()
{
int arabic, count, value;
char roman[50];
char filename[20];
FILE *file_in;
FILE *file_out;
value = 0;
count = 0;
printf ("Please enter the filename including extension.\n(example: filename.txt) : "); //asks user for filename to open
scanf ("%s",filename);
file_in = fopen (filename,"r"); //open the input stream
if (file_in == NULL)
{
printf ("Error: cannot open file.\n");
return 1;
}
else
{
printf ("File opened.\n");
}
while (fscanf(file_in,"%d",&value)!=EOF)
{
for (count=0; count<50; count++) //sets array to zero
{
roman[count] = 0;
}
arabic = value;
convert(value,roman); //function to convert numerals
file_out = fopen (filename,"a"); //open the output stream
fprintf (file_out, "\nThe value: %d = %s", arabic, roman); //append conversion to file
}
fclose (file_in);
fclose (file_out);
}