Загрузка...

Замена goto C++

Тема в разделе C/C++ создана пользователем DonCarlleone 14 мар 2018. 417 просмотров

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