Обновить cv3/program.c
This commit is contained in:
parent
3acee80c88
commit
db97ea1240
@ -11,6 +11,8 @@ typedef struct {
|
|||||||
int vershina;
|
int vershina;
|
||||||
} StEk;
|
} StEk;
|
||||||
|
|
||||||
|
int end_program = 0;
|
||||||
|
|
||||||
void inicStEk(StEk* stek) {
|
void inicStEk(StEk* stek) {
|
||||||
stek->vershina = 0;
|
stek->vershina = 0;
|
||||||
}
|
}
|
||||||
@ -26,6 +28,7 @@ int isFull(StEk* stek) {
|
|||||||
void push(StEk* stek, double chislo) {
|
void push(StEk* stek, double chislo) {
|
||||||
if (isFull(stek)) {
|
if (isFull(stek)) {
|
||||||
printf("full stack\n");
|
printf("full stack\n");
|
||||||
|
end_program = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stek->chisla[stek->vershina] = chislo;
|
stek->chisla[stek->vershina] = chislo;
|
||||||
@ -35,6 +38,7 @@ void push(StEk* stek, double chislo) {
|
|||||||
double pop(StEk* stek) {
|
double pop(StEk* stek) {
|
||||||
if (isEmpty(stek)) {
|
if (isEmpty(stek)) {
|
||||||
printf("not enough operands\n");
|
printf("not enough operands\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return stek->chisla[--stek->vershina];
|
return stek->chisla[--stek->vershina];
|
||||||
@ -44,7 +48,8 @@ int main() {
|
|||||||
StEk stek;
|
StEk stek;
|
||||||
inicStEk(&stek);
|
inicStEk(&stek);
|
||||||
char bufer[256];
|
char bufer[256];
|
||||||
while (fgets(bufer, sizeof(bufer), stdin) != NULL) {
|
while (fgets(bufer, sizeof(bufer), stdin) != NULL ) {
|
||||||
|
|
||||||
if (bufer[0] == '\n') {
|
if (bufer[0] == '\n') {
|
||||||
if (isEmpty(&stek)) {
|
if (isEmpty(&stek)) {
|
||||||
printf("no input\n");
|
printf("no input\n");
|
||||||
@ -61,15 +66,19 @@ int main() {
|
|||||||
|
|
||||||
if (c == '\n' && *bufer != '\n' && *bufer != ' ') {
|
if (c == '\n' && *bufer != '\n' && *bufer != ' ') {
|
||||||
push(&stek, chislo);
|
push(&stek, chislo);
|
||||||
|
if(end_program == 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
|
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
|
||||||
if (isEmpty(&stek)) {
|
if (isEmpty(&stek)) {
|
||||||
printf("not enough operands\n");
|
printf("not enough operands\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
double b = pop(&stek);
|
double b = pop(&stek);
|
||||||
if (isEmpty(&stek)) {
|
if (isEmpty(&stek)) {
|
||||||
printf("not enough operands\n");
|
printf("not enough operands\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
double a = pop(&stek);
|
double a = pop(&stek);
|
||||||
@ -82,15 +91,18 @@ int main() {
|
|||||||
} else if (c == '/') {
|
} else if (c == '/') {
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
printf("division by zero\n");
|
printf("division by zero\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
push(&stek, a / b);
|
push(&stek, a / b);
|
||||||
}
|
}
|
||||||
} else if (!isdigit(c) || !isalpha(c)) {
|
} else if (!isdigit(c) || !isalpha(c)) {
|
||||||
printf("bad input\n");
|
printf("bad input\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
printf("no input\n");
|
printf("no input\n");
|
||||||
|
end_program = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < stek.vershina; i++) {
|
for (int i = 0; i < stek.vershina; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user