int getop(char s[])
{
int i, c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
i = 0;
if (isalpha(c)) //math function found.
{
while (isalpha(s[++i] = c = getch()))
;
s[i] = '\0';
if (c != 'EOF')
ungetch(c);
return MATHLIB;
}
if ((c != '.'&&c != '-') &&!isdigit(c)) /*operand found*/
return c;
if (c == '-')
{
if (!isdigit(c = getch()))
{
ungetch(c);
return '-';
}
else
{
ungetch(c);
}
}
if (isdigit(c)) /*number found*/
{
{
while (isdigit(s[++i] = c = getch()))
;
}
if (c == '.')
{
while (isdigit(s[++i] = c = getch()))
;
}
s[i] = '\0';
if (c != EOF)
ungetch(c);
return NUMBER;
}
}
Это часть моего кода обратного польского калькулятора, который находится в рабочем состоянии.Проблема в том, что я попытался изменить строку
if ((c != '.'&&c != '-') &&!isdigit(c)) /*operand found*/
на
if ((c != '.'&&c != '-') && (c == '+' || c == '*' || c == '/' || c == '%'))
И хотя я думал, что она будет работать правильно, это не сработало.Функция switch в main () вообще не будет ловить операторы.Кроме того, каждое возвращаемое значение собиралось по умолчанию: printf («ошибка»);
Я не понимаю, почему это не сработало, и это беспокоит меня.Любой совет?