Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приостановка работы программы 
:(
    Опции темы
mr.Anderson
Дата 31.7.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Такая вот проблема. Есть программа на Си. Выполняется она в консольном окне (exe-файл). Но выполняется она моментально, а после завершения работы программы окно тут же закрывается... Как сделать, чтобы после выполнения всех инструкций программа спросила, например, хотим ли мы выйти, и, в зависимости от ответа, выходила бы или начинала все сначала.
Собственно код программы не имеет значения, но вот пример:
Код

#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int a,b,rez;
printf("a=");
scanf("%d",&a);
printf("\nb=");
scanf("%d",&b);
rez=a+b;
printf("Rezult = %d",rez);
return 0;
}


Это сообщение отредактировал(а) sim7 - 31.7.2005, 13:47


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
setq
Дата 31.7.2005, 13:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











давным давно под borlanb c++ была такая библиотека что-то вроде <conio.h> там была функция getch () которая возвращала символ нажатия клавиши. может и у тебя что-то подобное есть...
  Вверх
mr.Anderson
Дата 31.7.2005, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Почему была? У меня в примере скрипта тоже она подключена... Из нее взята clrscr() в моем скрипте. А формат функции getch() какой?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
LPBOY
Дата 31.7.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(sim7 @ 31.7.2005, 14:22)
А формат функции getch() какой?

Очень простой ;) Просто вызывай ее там где тебе нужна задержка и все.
Код

getch();


Цитата
Как сделать, чтобы после выполнения всех инструкций программа спросила, например, хотим ли мы выйти, и, в зависимости от ответа, выходила бы или начинала все сначала.


Код

#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int a,b,rez;
do
{
printf("a=");
scanf("%d",&a);
printf("\nb=");
scanf("%d",&b);
rez=a+b;
printf("Rezult = %d\n",rez);
printf("Press x key to exit or another key to continue :)\n");
}while(getch()!='x');
return;
}



Это сообщение отредактировал(а) LPBOY - 31.7.2005, 15:16
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
ManiaK
Дата 1.8.2005, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



А по-моему намного удобней так:
Код

system("PAUSE");

Лучше тем, что в англ. винде выдаст "Press any key to continue", а в русской версии - "Нажмите любую клавишу для продолжения"
PM MAIL WWW   Вверх
Romikgy
Дата 1.8.2005, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Удобнее , только возврата на начало нет smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ManiaK
Дата 1.8.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Romikgy Пардон, сплю ещё видимо smile
PM MAIL WWW   Вверх
mr.Anderson
Дата 2.8.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Всем спасибо, я нашел еще вариант. Пока его юзаю. Вот код:
Код

#include <iostream.h>
#include <conio.h>
void main(void)
{
char quest;
exit: clrscr();
//Что-то там делаем
//........
//В самом конце программы пишем:
cout<<"Exit? If yes, enter Y, else enter N: "; cin>>quest;
if(quest!='Y') goto exit;
}

Вот и усе. Как видите, вариант с меткой и безусловным переходом goto. Работает безотказно. smile

Это сообщение отредактировал(а) sim7 - 2.8.2005, 16:11


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
setq
Дата 2.8.2005, 16:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











пока пользователь не начнёт экспериментировать с вводимыми значениями.


особенно порадовало имя метки. ты бы переименовал чтоли smile
  Вверх
mr.Anderson
Дата 2.8.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Цитата
пока пользователь не начнёт экспериментировать с вводимыми значениями.

Ну, почему же? При вводе неверного значения прога просто вылетает. smile Универсальный выход из программы. smile
Цитата
особенно порадовало имя метки. ты бы переименовал чтоли

А зачем? Чем плоха метка exit? smile

Это сообщение отредактировал(а) sim7 - 2.8.2005, 16:49


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
kometa_triatlon
Дата 2.8.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Ну как те сказать... Есть такая функция просто...
А вообще метки маздай. Лучше используй if.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
mr.Anderson
Дата 2.8.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



А чем плохи метки?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
comcon1
Дата 2.8.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Да ничем. Просто предпочтительно их не использовать. Они могут порождать глюки. Перепрыгиваемые области сложно контролировать. Если в них отводится память или еще что-то вроде этого.
При работе с указателями в программе, содержащей множество прыжков очень сложно вспомнить где ты освободил\отвел память, а где еще нет. Ведь if явным образом локализует "область видимости" (понятие использую неверно поэтому кавычки), а метки делает из твоего кода множество самоналоженных и дырявых "областей". Разобраться в них -- анреал.
Метки используй в крайнем случае.


--------------------
PM MAIL   Вверх
mr.Anderson
Дата 2.8.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Ну, в принципе, если пара меток на всю программу - разобраться будет не так уж и сложно, я полагаю. smile
Добавлено @ 17:44
В общем, я все понял.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
comcon1
Дата 2.8.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Это да. Я вообще метки юзаю тока в тяжелых алгоритмах типа с графами и при выходе из двойного (или тройного и ..) цикла, где break не катит.


--------------------
PM MAIL   Вверх
setq
Дата 2.8.2005, 18:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











да я не про это. твоя метка называется exit. и на что она указывает? правильно, на начало цикла. smile
  Вверх
mr.Anderson
Дата 2.8.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



А, вон вы о чем. smile Да, несколько оригинально получилось... Но у меня реальный код немного другой, там все на своих местах. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Earnest
Дата 2.8.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



comcon1
Даже в этом случае (в тяжелых рекурсивных алгоритмах) лучше использовать exception, а не goto. По крайней мере, будешь знать, по какому поводу вышел. А во вложенных циклах - какой-нибудь управляющий флаг.
Как ты правильно заметил, при использовании меток возникают всякие проблемы с областью видимости переменных. Проблем больше, чем преимуществ - эта та самая длинная веревка, на которой можно повеситься. Оставьте goto генераторам конечных автоматов и прочему нечеловеческому коду. А уж в примере автора темы использовать goto просто смешно - по сути получается тот же цикл. Не надо подменять собой ассемблер.


--------------------
...
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.