File: Stare vježbe/vjezbe08/49__getop.c
/* 49__getop.c Sluzi za "prepoznavanje" prvog slijedeceg operanda (broja) ili operatora u ulaznom nizu znakova. */ #include <stdio.h> #include <ctype.h> #include "49__kalkulator.h" int getop ( char s[] ) { int i; char c; /* prvo preskacemo sva prazna mjesta ili tab-ove na pocetku ucitanog niza znakova (iz kojeg znak po znak dobivamo pomocu getc()) */ while ((s[0] = c = getc(stdin)) == ' ' || c == '\t'); /* sad u s[0] pise prvi znak koji nije praznina pretpostavimo za pocetak da je to jedini znak (tj. rijec je o operatoru, npr. '+' ili '*') */ s[1] = '\0'; /* ako trenutni znak (c, tj. s[0]) nije znamenka ili dec. tocka, zakljucujemo da je zaista rijec o operatoru */ if (!isdigit(c) && c != '.') return c; /* na ovom mjestu znamo da je rijec o broju, tj. operandu i ocitavamo znamenku po znamenku, koje spremamo u s */ i = 0; if (isdigit(c)) while (isdigit(s[++i] = c = getc(stdin))); /* moramo paziti i na eventualnu decimalnu tocku */ if (c == '.') while (isdigit(s[++i] = c = getc(stdin))); /* na kraj stringa stavljamo '\0' */ s[i] = '\0'; /* ako nakon sto smo zavrsili sa "prepoznavanjem" broja nismo dosli do kraja ucitanog niza znakova, ocitali smo iz buffer-a jedan znak viska koji priprada iducem operatoru/operandu -- moramo ga vratiti u buffer pomocu ungetc() */ if (c != EOF) ungetc(c, stdin); return BROJ; }
|