Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void Add( FILE *Calculatorfileoutput ,const char * Line );
void Multiply ( FILE * Calculatorfileoutput , const char * Line);
void Subtract (FILE * Calculatorfileoutput , const char * Line);
void Divide (FILE * Calculatorfileoutput , const char * Line);
void Changecase_UP (FILE * Calculatorfileoutput , const char * Line);
void Changecase_Down (FILE * Calculatorfileoutput , const char * Line);
void PrintKD (FILE * Calculatorfileoutput , const char * Line);
void PrintRR (FILE * Calculatorfileoutput , const char * Line);
void Separate (FILE * Calculatorfileoutput , const char * Line);
void Help (FILE * Calculatorfileoutput , const char * Line);
void Quit (FILE * Calculatorfileoutput , const char * Line);
int main ( void )
{
FILE *Calculatorfile;
Calculatorfile = fopen( "input.txt", "r");
FILE *Calculatorfileoutput;
Calculatorfileoutput = fopen("output.txt" , "w");
while(!feof(Calculatorfile))
{
char Buffer[256];
if(!fgets(Buffer,256,Calculatorfile)) // fgets returns 0 when EOF or Error occurs
{
break;
}
switch(Buffer[0]) // Check the first char in the current line
{
case '+' :
Add( Calculatorfileoutput , Buffer );
break;
case '*' :
Multiply ( Calculatorfileoutput , Buffer );
break;
case '-' :
Subtract (Calculatorfileoutput , Buffer );
break;
case '/' :
Divide (Calculatorfileoutput , Buffer );
break;
case 'C' :
Changecase_UP (Calculatorfileoutput , Buffer );
break;
case 'c' :
Changecase_Down (Calculatorfileoutput , Buffer );
break;
case 'P' :
PrintKD (Calculatorfileoutput , Buffer );
break ;
case 'R' :
PrintRR (Calculatorfileoutput , Buffer );
break;
case 'S' :
Separate (Calculatorfileoutput , Buffer );
case 'H' :
Help (Calculatorfileoutput , Buffer );
break;
//case 'Q' :
//Quit (Calculatorfileoutput , Buffer );
//break;
//default :
// some command
}
rewind(Calculatorfile);
}
fclose(Calculatorfile);
fclose(Calculatorfileoutput);
return 0 ;
}
void Add( FILE *Calculatorfileoutput ,const char * Line )
{
int Operator1 = 0;
int Operator2 = 0;
sscanf(Line,"+ %d %d\n",&Operator1, &Operator2); // It's like a scanf from a string, so a sscanf.
printf("Result of %d + %d = %d\n",Operator1, Operator2,Operator1+Operator2);
fprintf( Calculatorfileoutput,"Result of %d + %d = %d\n",Operator1, Operator2,Operator1+Operator2);
}
void Multiply ( FILE * Calculatorfileoutput , const char * Line)
{
int Operator1 = 0;
int Operator2 = 0;
sscanf(Line,"- %d %d\n",&Operator1, &Operator2); // It's like a scanf from a string, so a sscanf.
printf("Result of %d - %d = %d\n",Operator1, Operator2,Operator1-Operator2);
fprintf( Calculatorfileoutput,"Result of %d - %d = %d\n",Operator1, Operator2,Operator1-Operator2);
}
void Subtract (FILE * Calculatorfileoutput , const char * Line)
{
int Operator1 = 0;
int Operator2 = 0;
sscanf(Line,"* %d %d \n",&Operator1, &Operator2); // It's like a scanf from a string, so a sscanf.
printf("Result of %d * %d = %d \n",Operator1, Operator2,Operator1* Operator2);
fprintf( Calculatorfileoutput,"Result of %d * %d = %d \n",Operator1, Operator2,Operator1*Operator2);
}
void Divide (FILE * Calculatorfileoutput , const char * Line)
{
int Operator1 = 0;
int Operator2 = 0;
sscanf(Line,"/ %d %d \n",&Operator1, &Operator2); // It's like a scanf from a string, so a sscanf.
printf("Result of %d / %d = %d \n",Operator1, Operator2,Operator1 / Operator2);
fprintf( Calculatorfileoutput,"Result of %d * %d = %d\n",Operator1, Operator2,Operator1/Operator2);
}
void Changecase_UP (FILE * Calculatorfileoutput , const char * Line)
{
char UP_Word[256];
sscanf(Line,"C %s\n", UP_Word ); // It's like a scanf from a string, so a sscanf.
printf("UPPER CASE : %s\n", strupr(UP_Word ) );
fprintf( Calculatorfileoutput,"UPPER CASE : %s \n", strupr(UP_Word ) );
}
void Changecase_Down (FILE * Calculatorfileoutput , const char * Line)
{
char down_Word[256];
sscanf(Line,"C %s\n", down_Word ); // It's like a scanf from a string, so a sscanf.
printf("lower case : %s\n", strupr(down_Word ) );
fprintf( Calculatorfileoutput,"lower case : %s \n", strlwr(down_Word ) );
}
void PrintKD (FILE * Calculatorfileoutput , const char * Line)
{
}
void PrintRR (FILE * Calculatorfileoutput , const char * Line)
{
}
void Separate (FILE * Calculatorfileoutput , const char * Line)
{
char String_Separate [256];
sscanf(Line , "S %s" , String_Separate );
char * PtrtoString;
PtrtoString = strtok (String_Separate," ");
while (PtrtoString != NULL)
{
printf ("%s ",PtrtoString);
fprintf( Calculatorfileoutput,"%s" ,PtrtoString);
PtrtoString = strtok (NULL, " ");
}
}
void Help (FILE * Calculatorfileoutput , const char * Line)
{
printf( " \t + i j [Integer Add] Add integers i and j and print out result \n "
" \t * i j [Integer Multiply] Multiply integers i and j and print out result \n "
" \t - i j [Integer Subtract ] Subtract integer j from i and print out result \n "
" \t / i j [Integer Divide ] Divide integer i by j and print out result of integer division \n "
" \t C Ch [Character Case Change ] Change character Ch to uppercase and print it out \n "
" \t c Ch [Character Case Change] Change character Ch to lowercase and print it out \n "
" \t P i k [Print k-th Digit ] Print out the k-th digit of integer i \n "
" \t R x i [Round Reals ] Round double value x to i decimal places \n "
" \t S x [Separate ] Separate out the sign, integer part and fractional part of double value x \n "
" \t H [Help ] Print a short synopsis of all the available commands \n "
" \t Q [Quit ] Quit \n " );
fprintf( Calculatorfileoutput ," \t + i j [Integer Add] Add integers i and j and print out result \n "
" \t * i j [Integer Multiply] Multiply integers i and j and print out result \n "
" \t - i j [Integer Subtract ] Subtract integer j from i and print out result \n "
" \t / i j [Integer Divide ] Divide integer i by j and print out result of integer division \n "
" \t C Ch [Character Case Change ] Change character Ch to uppercase and print it out \n "
" \t c Ch [Character Case Change] Change character Ch to lowercase and print it out \n "
" \t P i k [Print k-th Digit ] Print out the k-th digit of integer i \n "
" \t R x i [Round Reals ] Round double value x to i decimal places \n "
" \t S x [Separate ] Separate out the sign, integer part and fractional part of double value x \n "
" \t H [Help ] Print a short synopsis of all the available commands \n "
" \t Q [Quit ] Quit \n " );
}
/*void Quit (FILE * Calculatorfileoutput , const char * Line)
{
if ( )
*/