Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Lawlliet
2 / 2 / 0
Регистрация: 25.03.2010
Сообщений: 145
#1

Прервать работу програмы - C++

25.09.2012, 22:06. Просмотров 1449. Ответов 20
Метки нет (Все метки)

У меня вопрос , могу ли я как то прервать работу программы при невыполненни или выполнении условия?

C++
1
2
3
4
 if ((defaultTemp > MaxTemp) or (MaxTemp <MinTemp))
         std::cout<<"ERROR!!\n\n WRONG  TEMPERATURE!!\n\n"; // прерывание программы
         else
         std::cout<<"Max temperature is "<<MaxTemp<<endl;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2012, 22:11     Прервать работу програмы #2
C++
1
exit(1);
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.09.2012, 22:14     Прервать работу програмы #3
Исключение киньте.
Lawlliet
2 / 2 / 0
Регистрация: 25.03.2010
Сообщений: 145
25.09.2012, 22:17  [ТС]     Прервать работу програмы #4
спасибо

разобрался

C++
1
2
3
4
5
6
if ((defaultTemp > MaxTemp) or (MaxTemp <MinTemp))
         {std::cout<<"ERROR!!\n\n WRONG  TEMPERATURE!!\n\n";
         system("pause");
         exit(1);}
         else
         std::cout<<"Max temperature is "<<MaxTemp<<endl;
получаеться так
rangerx
1922 / 1531 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
25.09.2012, 22:35     Прервать работу програмы #5
Либо используйте return, если код находится прямо в функции main, либо бросайте исключение. Функцию exit в C++ коде лучше не использовать.
Lawlliet
2 / 2 / 0
Регистрация: 25.03.2010
Сообщений: 145
25.09.2012, 22:41  [ТС]     Прервать работу програмы #6
это метод класса.
а как мне лучше тогда прервать программу?
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2012, 22:44     Прервать работу програмы #7
Цитата Сообщение от rangerx Посмотреть сообщение
Функцию exit в C++ коде лучше не использовать.
Причина?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.09.2012, 23:19     Прервать работу програмы #8
alsav22, не есть хорошо, когда некая функция возомнила себя Ктулху и может просто так завершить программу.

Добавлено через 3 минуты
Lawlliet,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
struct Foo
{
    void func()
    {
        throw 42;
    }
};
 
int main()
{
    Foo f;
    try
    {
        f.func();
    }
    catch(...)
    {
        std::cout << "Wow, something wrong with func() in Foo. Maybe, she is ill" << std::endl;
    }
    return 0;
}
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
25.09.2012, 23:22     Прервать работу програмы #9
soon,

Не по теме:

Каждый имеет право быть Ктулху! Ктулху фтанг! А функциям и подавно можно!

alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2012, 23:25     Прервать работу програмы #10
Цитата Сообщение от soon Посмотреть сообщение
alsav22, не есть хорошо, когда некая функция возомнила себя Ктулху и может просто так завершить программу.
Разве это функция решила, а не программист?

Цитата Сообщение от Lawlliet Посмотреть сообщение
могу ли Я как то прервать работу программы при невыполненни или выполнении условия?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.09.2012, 23:29     Прервать работу програмы #11
alsav22, Так-то, да, решил программист. Но что если используется сторонняя библиотека? Писали ее не мы, решали за функцию не мы, значит, можно попробовать утверждать, что функция сама так захотела. Суть-то не в том, кто решил, а в том, что из-за нее наша программа упадет и мы ничего не сможем сделать.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2012, 23:42     Прервать работу програмы #12
Но в данном конкретном случае, по моему, ничего страшного не призойдёт, если применить exit() ?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
25.09.2012, 23:52     Прервать работу програмы #13
alsav22, полагаю, что ничего. Однако, я все-же настойчиво советую исключения. Они делают все то, что требуется в поставленной задаче и даже чуточку больше.
rangerx
1922 / 1531 / 139
Регистрация: 31.05.2009
Сообщений: 2,894
26.09.2012, 02:02     Прервать работу програмы #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Причина?
3.6.1
Calling the function std::exit(int) declared in <cstdlib> (18.3) terminates the program without leaving the current
block and hence without destroying any objects with automatic storage duration (12.4). If std::exit is called to end a
program during the destruction of an object with static storage duration, the program has undefined behavior.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2012, 03:23     Прервать работу програмы #15
Пример можно?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.09.2012, 12:30     Прервать работу програмы #16
alsav22, http://blog.copton.net/archives/2007...xit/index.html
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2012, 13:53     Прервать работу програмы #17
soon, можно что-нибудь для примера по русски и без boost? Какой-нибудь простой код, в котором при применении exit() возникнет неопределённое поведение.
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.09.2012, 18:02     Прервать работу програмы #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <thread>
 
std::vector<int> v(100000000);
 
void fill()
{
    std::fill(v.begin(), v.end(), 42);
}
 
void my_exit()
{
    exit(0);
}
 
int main()
{
    std::thread t1(fill);
    std::thread t2(my_exit);
 
    t1.join();
    t2.join();
    return 0;
}
У меня сегфолт. Без экзита все чудно.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2012, 18:15     Прервать работу програмы #19
Цитата Сообщение от soon Посмотреть сообщение
#include <thread>
У меня компилятор это не понимает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 18:20     Прервать работу програмы
Еще ссылки по теме:

C++ Можно ли прервать цепочку наследования?
C++ Зависание програмы и бесконечный while
C++ Прервать цикл из цикла, вложенного в него
C++ Как прервать цикл используя условия ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.09.2012, 18:20     Прервать работу програмы #20
alsav22, фишка C++11. Суть в том, что в одном потоке идет работа с глобальным объектом а второй поток нагло прерывает работу.
Yandex
Объявления
26.09.2012, 18:20     Прервать работу програмы
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru