Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C++] как обойтись без goto?  (Прочитано 12110 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ZaVyLoN
Интересующийся

by
Offline Offline

« : 23-03-2010 15:21 » 

Всем HI
только нач ал как говориться делать первые шаги и возник вопрос Улыбаюсь

вопрос я задал в самом коде в коментах  Здесь была моя ладья...

сам код :
Код:
void show()
{
system("cls");
cout<<"\tИнформация о предприятиях\n\n";
cout<<"==========================================";
}
int main()
{
setlocale(0, "rus");
srand(time(0));

char k;
int x;
int z, klav;

Confectionery c;
c.init();
c.podschet();
Meat m;
m.init();
m.podschet();
Bakery b;
b.init();
b.podschet();
Upravlenie u;


system("cls");
cout<<"\t** Меню **\n"<<endl;
cout<<" ->  Просмотреть информацию   "<<endl;
cout<<"    Доходы                   "<<endl;
cout<<"    Выход                    "<<endl;


int p = 1;
int m1 = getch();
do
{
if(m1 == 80)
p++;
if(m1 == 72)
p--;

do
{
if(p<=0)
p = p+3;
}while (p<=0);
do
{
if(p>=4)
p = p-3;
}while (p>=4);

if(p == 1)
{
system("cls");
cout<<"\t** Меню **\n"<<endl;
cout<<" ->  Просмотреть информацию   "<<endl;
cout<<"    Доходы                   "<<endl;
cout<<"    Выход                    "<<endl;
m1 = getch();
if(m1 == 13)
{
system("cls");
cout<<"\tИнформация о предприятиях\n\n";
cout<<"==========================================";
c.show();
m.show();
b.show();

     // вот собоственно как отсюда выйти в главное меню не использую goto , тоже самое и в других 2 -x if()   :confused: :dontknow:

                                 
}
}
if(p == 2)
{
system("cls");
cout<<"\t** Меню **\n"<<endl;
cout<<"    Просмотреть информацию   "<<endl;
cout<<" ->  Доходы                   "<<endl;
cout<<"    Выход                    "<<endl;
m1 = getch();
}
if(p == 3)
{
system("cls");
cout<<"\t** Меню **\n"<<endl;
cout<<"    Просмотреть информацию   "<<endl;
cout<<"    Доходы                   "<<endl;
cout<<" ->  Выход                    "<<endl;
m1 = getch();
}
}while(m1!=13);


return 0;
}
« Последнее редактирование: 23-03-2010 15:33 от Finch » Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #1 : 23-03-2010 15:27 » 

Всю работу з меню вставь в бесконечный цикл (например, while(true)), а потом, если нужно, командой continue сможешь вернуться в начало, а командой break выйти с цикла и завершить работу. Такой вариант.

P.S. Было бы легче разобраться в коде, если бы не очень важные моменты упустил или заменил, к примеру, троеточием.  Улыбаюсь
« Последнее редактирование: 23-03-2010 15:30 от Inkognito » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 23-03-2010 15:34 » 

встречный вопрос: а где главное меню ?

и вообще, структура кода даже на беглый взгляд корявая... Расскажи задачу
Записан

Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 23-03-2010 15:37 » 

не вижу необходимости здесь в goto
ведь все попадает в цикл
do {
}while(m1!=13);

Если я правильно расшифровал
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #4 : 23-03-2010 16:34 » 

Inkognito,
спс , попробую))

Алексей1153++,
cout<<"\t** Меню **\n"<<endl;
cout<<"    Просмотреть информацию   "<<endl;
cout<<" ->  Доходы                   "<<endl;
cout<<"    Выход                    "<<endl;

есть меню, чтобы стрелочка бегала туда сюда написал,.
при нажатии Enter как для первого случая выводиться инф.
а как потом войти обратно в меню!??

и что корявого!?
подскажи будем исправлять)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 23-03-2010 17:19 » 

про стрелочку я не понял, так как программу не запускал )

Корявость - и неуниверсальность тоже - я бы изначально спроектировал в виде классов. Напрашивается сразу класс CMyMenu

Даже неважно, что там, а уже код на порядок станет более лёгким и универсальным
Записан

ZaVyLoN
Интересующийся

by
Offline Offline

« Ответ #6 : 23-03-2010 17:47 » 

-> safas
    asfda
    asdasd

     safas
-> asfda
    asdasd

    safas
    asfda
->asdasd

вот что я имел ввиду.
каждый раз перерисовываешь меню, имитируя движени
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 23-03-2010 17:58 » 

 Тут даже классы не нужны ИМХО ) Три строки-константы и один бесконечный цикл

для универсальности заменяем константные строки на массив или вектор и всё же завёртываем в класс. )))
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 23-03-2010 18:11 » 

вот примерное так (писал на коленке в блокноте на сильно уродской клаве на ноутбуке - лишь хочу показать идею, компилировать даже не пытался )) )
Код:
const char* pointer="->\t";
const char* emptypointer="  \t";

const char* menulist[]=
{
"Просмотреть информацию",
" Доходы  ",
"Выход ",
0
};

void printMenu(int pos_zb=0)
{
system("cls");
for(int i=0; menulist[i];i++)
{
if(pos_zb==i)
{
cout<<pointer;
}
else
{
cout<<emptypointer;
}

cout<<menulist[i]<<endl;
}
}

int main()
{


system("cls");


printMenu();


do
{
...

printMenu(текущая выбранная позиция,начинающаяся с 0);

...

}while(m1!=13);


return 0;
}
« Последнее редактирование: 23-03-2010 19:15 от Алексей1153++ » Записан

Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 23-03-2010 18:40 » 

Код:
do
{
...
printMenu(текущая выбранная позиция,начинающаяся с 0);
...
m1 = getch();
}while(m1!=13);
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 23-03-2010 19:07 » 

Алексей1153++, позволю себе поинтересоваться. Что такое print(0) ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 23-03-2010 19:13 » 

printMenu )

подправил
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 23-03-2010 19:19 » 

Алексей1153++, понятно. А то я уж подумал грешным делом, что выдруг есть что-то такое, а я и не вкурсе. Серьезно говорю.
Я вот вроде пишу сколько, а буквально только года 2 назад узнал, что printf'ом можно вполне законно выводить строки, не заканчивающиеся нулем. Это как бы шок для меня был. Столько лет printf себе и printf, а тут такое оказывается... С тех пор уже готов к любым неожиданностям  Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 23-03-2010 19:23 » 

resource, printf -м не пользуюсь Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 23-03-2010 19:24 » 

printf'ом можно вполне законно выводить строки, не заканчивающиеся нулем

а покажи, интересно, в чём шок )
Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 23-03-2010 19:35 » new

ну насчет шока это я конечно фигурально выразился  Улыбаюсь
скажем так, я был удивлен.
Цитата: MSDN
A format specification, which consists of optional and required fields, has the following form:

%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type


Я как-то никогда не обращал внимание на такое возможное значение "*", полей "width" и ".precision". Вроде простая и элементарная вещь. Но я просто как-то не знал даже о таком. И когда увидел, что в printf пихают не нуль-строку, подумал
Цитата
бред какой-то
оказалось не бред. Хотя на тот момент, я был в этом уверен. И  сам для себя обнаружил, что столько лет не знал элементарной вещи. Поэтому сейчас и предпочитаю поинтересоваться если вижу что-то непонятно, прежде чем утверждать. А то вдруг опять.... что-то  Улыбаюсь

похоже наоффтопил маленько...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines