Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ============================================================================
- Name : float.c
- Author :
- Version :
- Copyright : Your copyright notice
- Description : Hello World in C, Ansi-style
- ============================================================================
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- enum {
- START,
- ZNAMENKO,
- CELACAST,
- MOZNADESETINY,
- MOZNADESETINY2,
- DESETINNACAST,
- MOZNAEXPONENT,
- ZNAMENKOEXPONENT,
- EXPONENT,
- };
- void ok() {
- puts("OK");
- exit(0);
- }
- void error() {
- puts("ERROR");
- exit(0);
- }
- int main(int pocetp, char *poleRetezcu[]) {
- setvbuf(stdout, NULL, _IONBF, 0);
- setvbuf(stderr, NULL, _IONBF, 0);
- int stav = START;
- int znak;
- FILE *f = stdin;
- if (pocetp > 1) {
- f = fopen(poleRetezcu[1], "r");
- if (f == NULL) {
- printf("Nepodarilo se otevrit soubor. \n");
- return 0;
- }
- }
- while ((znak = fgetc(f)) != EOF) {
- switch (stav) {
- case START:
- if (znak == '.')
- stav = MOZNADESETINY;
- else if (znak == '+' || znak == '-')
- stav = ZNAMENKO;
- else if (isdigit(znak))
- stav = CELACAST;
- break;
- case ZNAMENKO:
- if (znak == '.')
- stav = MOZNADESETINY;
- else if (isdigit(znak))
- stav = CELACAST;
- else
- error();
- break;
- case CELACAST:
- if (znak == 'E')
- stav = MOZNAEXPONENT;
- else if (isspace(znak))
- ok();
- else if (znak == '.')
- stav = MOZNADESETINY2;
- else if (!isdigit(znak))
- error();
- break;
- case MOZNADESETINY:
- if (isdigit(znak))
- stav = DESETINNACAST;
- else
- error();
- break;
- case MOZNADESETINY2:
- if (isdigit(znak))
- stav = DESETINNACAST;
- else if (znak == 'E')
- stav = MOZNAEXPONENT;
- else
- error();
- break;
- case DESETINNACAST:
- if (znak == 'E')
- stav = MOZNAEXPONENT;
- else if (isspace(znak))
- ok();
- else if (!isdigit(znak))
- error();
- break;
- case MOZNAEXPONENT:
- if (znak == '+' || znak == '-')
- stav = ZNAMENKOEXPONENT;
- else if (isdigit(znak))
- stav = EXPONENT;
- else
- error();
- break;
- case ZNAMENKOEXPONENT:
- if (isdigit(znak))
- stav = EXPONENT;
- else
- error();
- break;
- case EXPONENT:
- if (isspace(znak))
- ok();
- else if (!isdigit(znak))
- error();
- break;
- }
- //fprintf(stderr,"stav = %d, znak = %c \n",stav,znak);
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement