diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2490a4d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +/calc diff --git a/calc b/calc deleted file mode 100755 index 023ec18..0000000 Binary files a/calc and /dev/null differ diff --git a/calc.c b/calc.c index 85f1466..f0a5b66 100644 --- a/calc.c +++ b/calc.c @@ -1,32 +1,39 @@ #include #include "operators.h" - +#include "my_fscanf.h" int main(){ FILE *fp = NULL; - int operand1, operand2; + int operand1, operand2,line=0; char operator = ' '; - int result, line = 0; - + double result; + double (*function_p) (int ,int ); + fp = fopen("read.txt","r"); if(fp!=NULL){ - fscanf(fp, "%d", &line); + my_fscanf(fp, "%d", &line); - for(int i=0; i +#include +#include + +void my_fscanf(FILE *fp, const char *format, ...) { + va_list list; + va_start(list, format); + char* cc; + while (*format) { + if (*format == '%') { + format++; + int c,*_num; + switch(*format) { + case 'd' : + while(isspace(c = getc(fp))) {} + _num = va_arg(list, int*); + unsigned int num = 0; + while (isdigit(c)) { + num = num * 10 + c - '0'; + c = getc(fp); + } + *_num = num; + while(isspace(c = getc(fp))) {} + ungetc(c,fp); + break; + case 'c' : + cc = va_arg(list, char*); + c = getc(fp); + *cc =c; + while(isspace(c = getc(fp))) {} + ungetc(c,fp); + break; + } + } + else + format++; + } + va_end(list); + +} diff --git a/my_fscanf.h b/my_fscanf.h new file mode 100644 index 0000000..6e88e0b --- /dev/null +++ b/my_fscanf.h @@ -0,0 +1,8 @@ +#ifdef MY_FSCANF_H +#define MY_FSCANF_H +#include + +void my_fscanf(FILE *fp, const char *format, ...); + +#endif /* !MY_FSCANF_H */ + diff --git a/operators.c b/operators.c index d51cb3e..de299a6 100644 --- a/operators.c +++ b/operators.c @@ -1,16 +1,16 @@ #include "operators.h" -int add(int op1, int op2) { +double add(int op1, int op2) { return op1+op2; } -int minus(int op1, int op2) { +double minus(int op1, int op2) { return op1-op2; } -int mul(int op1, int op2) { +double mul(int op1, int op2) { return op1*op2; } -int div(int op1, int op2) { - return op1%op2; +double div(int op1, int op2) { + return op1/(double)op2; } diff --git a/operators.h b/operators.h index bd08f7d..c3c84b7 100644 --- a/operators.h +++ b/operators.h @@ -1,4 +1,4 @@ -int add(int op1, int op2); -int mul(int op1, int op2); -int div(int op1, int op2); -int minus(int op1, int op2); +double add(int op1, int op2); +double mul(int op1, int op2); +double div(int op1, int op2); +double minus(int op1, int op2); diff --git a/operators.o b/operators.o deleted file mode 100644 index 71b996c..0000000 Binary files a/operators.o and /dev/null differ