Загрузка...

Replacing goto C++

Thread in C/C++ created by DonCarlleone Mar 14, 2018. 437 views

  1. DonCarlleone
    DonCarlleone Topic starter Mar 14, 2018 Banned 172 Sep 22, 2016
    Ребят вот код польського калькулятора,помогите заменить GOTO на более адекватный оператор. С++
    case 27 : goto result;
    Code

    #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;
    }
     
  2. Yffhnlol
    Yffhnlol Mar 14, 2018 come in stranger 26 Dec 24, 2017
    я вообще не понял, что это за странный калькулятор. но без IDE и компилятора подредактировал твой код. попробуй так:

    Code

    #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;
    }
     
  3. Yffhnlol
    Yffhnlol Mar 14, 2018 come in stranger 26 Dec 24, 2017
    кстати goto сильно уважается в оптимизациях на очень слабом железе.
     
  4. Donime
    Donime Mar 14, 2018 Banned 67 May 1, 2017
    Ну нах ваши языки getto нахуй
     
  5. lewiza
    lewiza Mar 14, 2018 4 Jan 17, 2017
    Yffhnlol, Yffhnlol, использование goto - плохой тон в программировании. Это тебе не ассемблер
     
  6. Yffhnlol
    Yffhnlol Mar 14, 2018 come in stranger 26 Dec 24, 2017
    спасибо за мнение. я учту его в остальной куче, где уже программисты разных мастей из моего окружения оставили свой отзыв.
     
  7. DonCarlleone
    DonCarlleone Topic starter Mar 15, 2018 Banned 172 Sep 22, 2016
    Можно както изменить етот код или вообще есть другие пожожие польские калькуляторы ???
     
Loading...
Top