Приемы лексического анализа введенного текста - C (СИ)
Формулировка задачи:
Доброго времени суток. В программе мне нужно из введенного текста удалить десятичные числа, превышающие INT_MAX. При этом мне нужно использовать при написании программы парадигму автоматного программирования. Я написал программу
При этом у меня выскакивает ошибка "fixed-point types not supported for this target"
Вероятно, сама логика моей программы неправильна.
Помогите пожалуйста доработать программу. Если мое решение совсем неправильное, то, если нетрудно, напишите свой вариант.
#include <stdio.h> #include <ctype.h> int main(void) { enum states { outside, inside } state; /*состояния внутри и вне слова*/ int space,c,k,max; state = outside; space=1; /*слева от числа должен быть пробел, 1-его наличие, если все слово число и за ним идет точка, запятая, пробел или конец строки, то если space=1 слово не печатается*/ k=0; printf("Введите максимальное число %d\n",max); while ((c = getchar()) != EOF) { switch (state) { case outside: if ((isspace(c)) || c==',' || c=='.') { putchar(c); if (c==' ' || c=='\n') space=1; } if (isalnum(c)) { if (isalpha(c)) { putchar(c); space=0; } if (isdigit(c) && space==1) { k=10k+c; /*здесь по мнению компилятора есть ошибка*/ } state=inside; } case inside: if (isalnum(c)) { if (isalpha(c) && k!=0) { printf("%d", k); k=0; putchar(c); space=0; } if (isdigit(c) && space==1) { /*сохраняю число, пока оно не закончилось*/ k=10k+c; /*Такая же ошибка*/ } } if ((isspace(c) || c==',' || c=='.') && k!=0) { if (k<=max) printf("%d", k); } } } return 0; }
Решение задачи: «Приемы лексического анализа введенного текста»
textual
Листинг программы
int ok = 0; if (INT_MAX/10 < k) { ;// ERROR переполнение } else if (INT_MAX/10 == k) { if(INT_MAX%10 < d) { ;// ERROR переполнение } else ok = 2; // OK, но следующее увеличение k невозможно } else ok = 1;// OK можно увеличивать if (ok) { k = 10*k + d }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д