From 52b1ad540640a0cd9ef1630fdd328af1b9a02ffe Mon Sep 17 00:00:00 2001 From: SangWonKo Date: Wed, 3 Aug 2016 14:24:00 -0700 Subject: [PATCH] lab14 --- calc.c | 33 +++++++++++++++++---------------- my_fscanf.c | 40 ++++++++++++++++++++++++++++++++++++++++ my_fscanf.h | 7 +++++++ 3 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 my_fscanf.c create mode 100644 my_fscanf.h diff --git a/calc.c b/calc.c index 85f1466..a5fc122 100644 --- a/calc.c +++ b/calc.c @@ -1,35 +1,36 @@ #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); - - 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..3f3c655 --- /dev/null +++ b/my_fscanf.h @@ -0,0 +1,7 @@ +#indef MY_FSCANF_H +#define MY_FSCANF_H +#include + +void my_fscanf(FILE *fp, const char *format, ...); + +#endif /* !MY_SCANF_H */