1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
|
#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 ( )
*/
|