Как и куда записать строку, которая будет парситься?
#include <iostream>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define STKDPTH 32
#define VAL 0
#define ADD 1
#define SUB 2
#define MUL 3
#define DIV 4
#define SOF -1
#define SUF -2
#define UNK -3
int scount;
double stack[STKDPTH];
int parse(char *);
int main(int argc, char **argv)
{
while (*++argv) {
switch (parse(*argv)) {
case VAL: continue;
case ADD:
stack[scount - 1] += stack[scount];
break;
case SUB:
stack[scount - 1] -= stack[scount];
break;
case MUL:
stack[scount - 1] *= stack[scount];
break;
case DIV:
if (stack[scount] != 0) {
stack[scount - 1] /= stack[scount];
break;
} else {
fprintf(stderr, "Деление на ноль!\n");
return(1);
}
case SUF:
fprintf(stderr, "Недостаточно операндов!\n");
return(1);
case SOF:
fprintf(stderr, "Переполнение стека!\n");
return(1);
case UNK:
fprintf(stderr, "Неопознанный аргумент!\n");
return(1);
}
}
int i;
for (i = 0; i < scount; i++) printf("%0.3f\n", stack[i]);
return(0);
}
int parse(char *s)
{
double tval = 0;
char * endptr;
switch (*s) {
case '-':
if (*(s+1) != '\0') break;
if (scount >= 2) {
scount -= 1;
return(SUB);
}
else return(SUF);
case '+':
if (scount >= 2) {
scount -= 1;
return(ADD);
}
else return(SUF);
case 'x':
if (scount >= 2) {
scount -= 1;
return(MUL);
}
else return(SUF);
case '/':
if (scount >= 2) {
scount -= 1;
return(DIV);
}
else return(SUF);
}
errno = 0;
tval = strtod(s, &endptr);
if (errno != 0 || *endptr != '\0') return(UNK);
if (scount < STKDPTH) stack[scount++] = tval;
else return(SOF);
return(VAL);
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как сделать такую анимацию пагинации перемещения точек элементов между числами 01, 02 , 03 , 04 ?
В CSS есть интересное преобраазование: transform: translate(-50%, -50%);Позволяет расположить элемент точно по центру экрана, если в результате применения...
Задачка вроде не сложная, а таску надо решить очень срочно