diff options
Diffstat (limited to '7.5/op.c')
-rw-r--r-- | 7.5/op.c | 33 |
1 files changed, 13 insertions, 20 deletions
@@ -4,29 +4,22 @@ char getop(char *op, size_t len) { - size_t i; + int rs; + double f; - *op = '\0'; // if scanf fails - do { - scanf("%c", op); - } while (isblank(*op)); + while ((rs = scanf("%c", op)) != EOF) + if (*op != ' ' && *op != '\t') + break; - if (!isdigit(*op)) - return *op; - - i = 1; - do { - scanf("%c", op + i); - } while (isdigit(op[i]) && ++i < len); + op[1] = '\0'; + if (rs == EOF) + return EOF; - if (op[i] == '.') { - i++; - do { - scanf("%c", op + i); - } while (isdigit(op[i]) && ++i < len); - } + if (!isdigit(*op) && *op != '.') + return *op; - ungetc(op[i], stdin); - op[i] = '\0'; + ungetc(*op, stdin); + scanf("%lf", &f); + snprintf(op, len, "%lf", f); return NUM; } |