aboutsummaryrefslogtreecommitdiff
path: root/7.5/op.c
blob: e7640e6758629a3fd8153e825a83b7a61c65586f (plain) (blame)
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
#include <stdio.h>
#include <ctype.h>
#include "op.h"

char getop(char *op, size_t len)
{
	size_t i;

	*op = '\0'; // if scanf fails
	do {
		scanf("%c", op);
	} while (isblank(*op));

	if (!isdigit(*op))
		return *op;

	i = 1;
	do {
		scanf("%c", op + i);
	} while (isdigit(op[i]) && ++i < len);

	if (op[i] == '.') {
		i++;
		do {
			scanf("%c", op + i);
		} while (isdigit(op[i]) && ++i < len);
	}

	ungetc(op[i], stdin);
	op[i] = '\0';
	return NUM;
}