summaryrefslogtreecommitdiffstats
path: root/4
diff options
context:
space:
mode:
Diffstat (limited to '4')
-rw-r--r--4/10.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/4/10.c b/4/10.c
index d01a14f..c8df3ee 100644
--- a/4/10.c
+++ b/4/10.c
@@ -15,6 +15,7 @@
#define INDEX(x) (x <= 'Z' ? x - 'A' : x - 71) /* index of the variable */
int var[52];
+double lout;
void push(double);
double peek();
@@ -69,8 +70,17 @@ int main(int argc, char *argv[]) {
case '=':
var[INDEX(s[0])] = pop();
break;
+ case VAR:
+ if (strcmp("LOUT", s) == 0)
+ push(lout);
+ else
+ push(var[INDEX(s[0])]);
+ break;
case FUN:
break;
+ case '\n':
+ lout = pop();
+ printf("\t%.8g\n", lout);
default:
printf("error: unknown command %s\n", s);
}
@@ -86,7 +96,7 @@ int line[MAXLINE];
int mgetline() {
int i, c;
- for (i = 0; i < MAXLINE - 1 && (c = getchar()) != '\n' && c != EOF; i++) {
+ for (i = 0; i < MAXLINE - 1 && (c = getchar()) != EOF; i++) {
line[i] = c;
}
@@ -103,7 +113,7 @@ int getop(char s[]) {
s[1] = 0;
// special characters and operators
- if (c == 0 || c == '+' || c == '*' || c == '/' || c == '%' ||
+ if (c == 0 || c == '+' || c == '*' || c == '/' || c == '%' || c == '\n' ||
(c == '-' && isdigit(line[idx + 1])) || c == EOF)
return c;