Ребят вот код польського калькулятора,помогите заменить GOTO на более адекватный оператор. С++ case 27 : goto result; #include <malloc.h> #include <stdio.h> using namespace std; int m = 0; int stack[100]; int pop(void) { if (m > 0) { return stack[--m]; } else { fprintf(stderr, "Stack is empty\n"); return 0; } }; void push(int a) { stack[m++] = a; }; int empty() { return (m == 0); } int main() { int i; while (!feof(stdin)) { int c = getchar(); int x; switch (c) { case '\n': case ' ' : break; case '=' : printf("Result = %d\n", pop()); break; case 27 : goto result; case '+' : push(pop() + pop()); break; case '-' : push(-pop() + pop()); break; case '*' : push(pop() * pop()); break; default: ungetc(c, stdin); if (scanf("%d", &x) != 1) { fprintf(stderr, "Can't read integer\n"); return -1; } else { push(x); } break; } } result: i = 0; while (!empty()) { printf("Stack[%d] = %d\n", i, pop()); i++; } return 0; } Код #include <malloc.h> #include <stdio.h> using namespace std; int m = 0; int stack[100]; int pop(void) { if (m > 0) { return stack[--m]; } else { fprintf(stderr, "Stack is empty\n"); return 0; } }; void push(int a) { stack[m++] = a; }; int empty() { return (m == 0); } int main() { int i; while (!feof(stdin)) { int c = getchar(); int x; switch (c) { case '\n': case ' ' : break; case '=' : printf("Result = %d\n", pop()); break; case 27 : goto result; case '+' : push(pop() + pop()); break; case '-' : push(-pop() + pop()); break; case '*' : push(pop() * pop()); break; default: ungetc(c, stdin); if (scanf("%d", &x) != 1) { fprintf(stderr, "Can't read integer\n"); return -1; } else { push(x); } break; } } result: i = 0; while (!empty()) { printf("Stack[%d] = %d\n", i, pop()); i++; } return 0; }
я вообще не понял, что это за странный калькулятор. но без IDE и компилятора подредактировал твой код. попробуй так: #include <malloc.h> #include <stdio.h> using namespace std; int m = 0; int stack[100]; int pop(void){ if (m > 0){ return stack[--m]; } else{ fprintf(stderr, "Stack is empty\n"); return 0; } } void push(int a){ stack[m++] = a; } int empty(){ return (m == 0); } int main() { int i; int c = 0; while (!feof(stdin) || c != 27 ){ c = getchar(); int x; switch (c) { case '\n': case ' ' : break; case '=' : printf("Result = %d\n", pop()); break; case 27 : break; case '+' : push(pop() + pop()); break; case '-' : push(-pop() + pop()); break; case '*' : push(pop() * pop()); break; default: ungetc(c, stdin); if (scanf("%d", &x) != 1) { fprintf(stderr, "Can't read integer\n"); return -1; } else { push(x); } break; } } i = 0; while (!empty()) { printf("Stack[%d] = %d\n", i, pop()); i++; } return 0; } Код #include <malloc.h> #include <stdio.h> using namespace std; int m = 0; int stack[100]; int pop(void){ if (m > 0){ return stack[--m]; } else{ fprintf(stderr, "Stack is empty\n"); return 0; } } void push(int a){ stack[m++] = a; } int empty(){ return (m == 0); } int main() { int i; int c = 0; while (!feof(stdin) || c != 27 ){ c = getchar(); int x; switch (c) { case '\n': case ' ' : break; case '=' : printf("Result = %d\n", pop()); break; case 27 : break; case '+' : push(pop() + pop()); break; case '-' : push(-pop() + pop()); break; case '*' : push(pop() * pop()); break; default: ungetc(c, stdin); if (scanf("%d", &x) != 1) { fprintf(stderr, "Can't read integer\n"); return -1; } else { push(x); } break; } } i = 0; while (!empty()) { printf("Stack[%d] = %d\n", i, pop()); i++; } return 0; }
спасибо за мнение. я учту его в остальной куче, где уже программисты разных мастей из моего окружения оставили свой отзыв.