Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2014, 20:06   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию исключить оператор goto

Ребят, здравствуйте, программа работает, но возможно ли обойтись без goto?

Код:

#include <QCoreApplication>
#include "new_f.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int menu, returns=40;

    do
    {
mn1: system("cls");
        printf("***** MENU *****\n");
        printf("1 - Exemple nomber 1\n");
        printf("2 - Exemple nomber 2\n");
        printf("0 - exit\n");
        scanf("%d",&menu);

        switch (menu)
        {
        case (1):
        {
            do
            {
                system("cls");
                float s_okr=0;
                printf("BBEDITE DLINU OKR:...");
                scanf("%f",&s_okr);
                printf("Pkvadr=%f",perkvadr(s_okr));
                printf("\nBEGINING NEW? 1-yes 0-return menu\n");
                scanf("%d",&returns);

            }

            while (returns!=0);
            if (returns==0)  goto mn1;

        }



        case (2):
        {

            do
            {
                system("cls");

                float pi,py,sphone,sdrob;
                int month=1,years=0;
                printf("Enter procent iznosa...Enter: ");
                scanf("%f",&pi);

                printf("Enter procent ystar....Enter: ");
                scanf("%f",&py);

                printf("Enter price phone...Enter: ");
                scanf("%f",&sphone);

                sdrob=sphone/20;


                printf("\n");

                do
                {sphone=sphone-(((sphone*pi)/100)+((sphone*py)/100));
                    printf("Month #%d: %f\n",month,sphone);

                    month++;
                }
                while (sdrob<=sphone);

                month--;

                while (month>11)
                {

                    month=month-12;
                      years++;
                }
                printf("\n");
                printf("Years: %d\nMonth: %d",years,month);
                printf("\nBEGINING NEW? 1-yes 0-return menu\n");
                scanf("%d",&returns);

            }

            while (returns!=0);
            if (returns==0)  goto mn1;

        }


        }
    }
    while(menu!=0);

    system("cls");
    printf("POKA!");
    return a.exec();
}
from dark to light)

Последний раз редактировалось Stilet; 21.12.2014 в 21:17.
Алексей_2012 вне форума Ответить с цитированием
Старый 21.12.2014, 21:17   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

фейспалм...у вас метка в начале цикла

goto в конце цикла...нахер он там вообще?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.12.2014, 21:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Конечно можно. Оформить все в процедуры.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.12.2014, 21:34   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Чтобы меню выводилось при выполнении кейса1 и при условии что первая программа выполняться не будет. Так же и со вторым кейсом
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.12.2014, 21:35   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

То есть гото возвращается к первому циклу, цикл до тех пор, пока в меню не 0
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.12.2014, 21:43   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
То есть гото возвращается к первому циклу, цикл до тех пор, пока в меню не 0
я отлично вижу что у вас написано, но вы его сами почитайте внимательно, посмотрите как он работает.
особенно посмотрите условия внутренних циклов и условия ваших goto.
посмотрите куда пошел бы код если бы не было goto.

и увидите то что увидел я.
(да я знаю у меня опыт и все такое что позволяет мне интерпретировать код в голове, но все же..)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.12.2014, 22:55   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Разве команда break за место goto не остановит код до второй процедуры?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 22.12.2014, 06:36   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Выброси из своей задачи все лишнее и сформулируй вопрос заново с минимальным примером.
Явно процент износа никакого отношения не имеет к goto и твоей проблеме.
rrrFer вне форума Ответить с цитированием
Старый 22.12.2014, 08:15   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вот про break вы верно, их там надо сунуть вместо goto (и условием)
чето не учел сонным, а то после первой ветки идет вторая. break прервет case
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.12.2014, 08:25   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
#include <QCoreApplication>
#include "new_f.h"

void uno(){

                system("cls");
                float s_okr=0;
                printf("BBEDITE DLINU OKR:...");
                scanf("%f",&s_okr);
                printf("Pkvadr=%f",perkvadr(s_okr));
}
void duo(){

                system("cls");

                float pi,py,sphone,sdrob;
                int month=1,years=0;
                printf("Enter procent iznosa...Enter: ");
                scanf("%f",&pi);

                printf("Enter procent ystar....Enter: ");
                scanf("%f",&py);

                printf("Enter price phone...Enter: ");
                scanf("%f",&sphone);

                sdrob=sphone/20;


                printf("\n");

                do
                {sphone=sphone-(((sphone*pi)/100)+((sphone*py)/100));
                    printf("Month #%d: %f\n",month,sphone);

                    month++;
                }
                while (sdrob<=sphone);

                month--;

                while (month>11)
                {

                    month=month-12;
                      years++;
                }
                printf("\n");
                printf("Years: %d\nMonth: %d",years,month);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int menu, returns=40;

    do
    {
  system("cls");
        printf("***** MENU *****\n");
        printf("1 - Exemple nomber 1\n");
        printf("2 - Exemple nomber 2\n");
        printf("0 - exit\n");
        scanf("%d",&menu);

        switch (menu)      {
        case (1): uno; break;
        case (2): duo; break;
    }
    } while(menu!=0);

    system("cls");
    printf("POKA!");
    return a.exec();
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
6.1. Оператор перехода GOTO. Цикл. Метки Fryg Паскаль, Turbo Pascal, PascalABC.NET 5 01.07.2011 07:33
Оператор Goto Avvakymova Паскаль, Turbo Pascal, PascalABC.NET 0 09.05.2011 12:36
Оператор GoTo Dalokoshka Помощь студентам 6 10.10.2010 15:22
Pascal. решить задачу используя цикл for и оператор безусловного перехода goto Knubbe Помощь студентам 8 18.12.2009 03:08