Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

Как кинуть исключение std::locale::global(std::locale("");

24.01.2013, 02:08. Показов 2898. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Знаю, что на С можно так:
C
1
2
3
4
if (!setlocale(LC_ALL, "")) {
    perror("Couldn't set locale");
    exit(EXIT_FAILURE);
}
как сделать проверку на С++ используя std::locale::global(std::locale("")); ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2013, 02:08
Ответы с готовыми решениями:

Std::locale()
Где посмотреть перечень строк, которые используются в качестве входных данных для него? ...

Получить текущий locale. (category, * locale)
Привет! Если стоит: setlocale (LC_ALL, "Ukrainian"); как я могу теперь получить его аргументы?...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++...

Поиск в std::vector < std::pair<UInt32, std::string> >
Подскажите пожалуйста, как осуществить поиск элемента в std::vector &lt; std::pair&lt;UInt32,...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

15
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
24.01.2013, 09:13 2
Конструктор класса std::locale, принимающий имя локали, генерируют исключение std::runtime_error, если не обнаруживают локали на системе.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
24.01.2013, 18:50  [ТС] 3
Покажите пожалуйста, как перехватить это исключение
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
24.01.2013, 19:24 4
C++
1
2
3
4
5
try {
  std::locale::global(std::locale(""));
} catch (std::runtime_error e) {
  std::cout << "Could not set global locale: " << e.what() << std::endl
}
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
24.01.2013, 20:56  [ТС] 5
А подскажите throw тогда в каких случаях нужно применять?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.01.2013, 21:27 6
xtorne21st, когда исключение не генерируется автоматически.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
24.01.2013, 21:55  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
xtorne21st, когда исключение не генерируется автоматически.
А как узнать когда оно автоматически генерируется, а когда нет?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.01.2013, 22:03 8
xtorne21st, читать спецификацию класса
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
24.01.2013, 22:14 9
Цитата Сообщение от xtorne21st Посмотреть сообщение
Как кинуть исключение std::locale::global(std::locale("");
Что за исключение такое?
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.01.2013, 22:50  [ТС] 10
Цитата Сообщение от lemegeton Посмотреть сообщение
try { std::locale::global(std::locale("")); } catch (std::runtime_error e) { std::cout << "Could not set global locale: " << e.what() << std::endl }
А в конце ветки catch нужно ли использовать return -1 или программа сама завершит своё выполнение?

Добавлено через 1 час 38 минут
Ну типа аварийный выход?
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
28.01.2013, 01:21 11
Цитата Сообщение от xtorne21st Посмотреть сообщение
А в конце ветки catch нужно ли использовать return -1 или программа сама завершит своё выполнение?
Логика уже на ваше усмотрение. Мне кажется, что ошибка восстановима и работу программы можно продолжить, но я не пробовал.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
28.01.2013, 12:40 12
Цитата Сообщение от xtorne21st Посмотреть сообщение
А в конце ветки catch нужно ли использовать return -1 или программа сама завершит своё выполнение?
Нет. Не завершит. Мы для этого и перехватываем исключение. Если хотите аварийное завершение, то пробросте его дальше.
1
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 13:48 13
xtorne21st, исключение - это для программиста. Если хотите выйти, то выходите ручками
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 14:11  [ТС] 14
Цитата Сообщение от go Посмотреть сообщение
Нет. Не завершит. Мы для этого и перехватываем исключение. Если хотите аварийное завершение, то пробросте его дальше.
Я просто читал, что вроде есть исключения, которые завршают выполнение программы: толи после всех веток catch, толи ещё какие-то случай - точно не знаю...

Добавлено через 58 секунд
Если вы помните, то дайте, пожалуйста, пример.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 14:15 15
xtorne21st, так если ты его поймал, то дальше оно не пойдет. И если ты в отловщике не напишешь выйти, то с чего он должен было бы выйти?

Добавлено через 29 секунд
Кстати, насчет исключений, я правильно понимаю, что они выходят "насквозь" через все функции, пока не достигнут отловщика/пока функции не кончатся ?
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 14:48  [ТС] 16
Цитата Сообщение от Kgfq Посмотреть сообщение
Кстати, насчет исключений, я правильно понимаю, что они выходят "насквозь" через все функции, пока не достигнут отловщика/пока функции не кончатся ?
Будут проходить через все ветки catch и если не смогут быть обработаны, то програма завершиться (кажется аварийно). Я об этом читал, но как реализовать не знал. Я просто считал, что если ошибка не будет обработана то программа завершиться автоматически, а как оказывается нужно ещё в конце поставить что-то типа exit(1);

B вот ещё пытаюсь обработать ошибку таким образом, но компилятор выдаёт предупреждение:
Bash
1
2
3
4
test.cpp:15:7: warning: exception of type ‘std::runtime_error’ will be caught [enabled by default]
test.cpp:12:7: warning:    by earlier handler for ‘std::runtime_error’ [enabled by default]
test.cpp:18:7: warning: exception of type ‘std::runtime_error’ will be caught [enabled by default]
test.cpp:15:7: warning:    by earlier handler for ‘std::runtime_error’ [enabled by default]
Как можно сделать это более, элегантным способом, чтобы компилятор (gcc) не нервничал?
C++
1
2
3
4
5
6
7
8
9
10
11
12
    try {
    std::locale::global(std::locale(""));
    } catch (std::runtime_error bad_locale_error) {
        std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl;
        std::locale::global(std::locale("en_US.utf8"));
    } catch (std::runtime_error bad_locale_error) {
        std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl;
        std::locale::global(std::locale("Russian"));
    } catch (std::runtime_error bad_locale_error) {
        std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl;
        exit(1);
    }
Добавлено через 2 минуты
Пс. Принципе, он жалуется на то, что я всегда использую одно и тоже исключение: std::runtime_error. Как можно этого избежать не теряя смысл в ветке try?

Добавлено через 10 минут
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
try { std::locale::global(std::locale("")); } catch (std::runtime_error bad_locale_error) { std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl; std::locale::global(std::locale("en_US.utf8")); } catch (std::runtime_error bad_locale_error) { std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl; std::locale::global(std::locale("Russian")); } catch (std::runtime_error bad_locale_error) { std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl; exit(1); }
Как оказалось - это вообще ошибочный код. Так как мне сделать, чтобы оно пыталось в теле try автоматически выставить локаль?
0
28.01.2013, 14:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2013, 14:48
Помогаю со студенческими работами здесь

Объясните, что означает wcout.imbue( locale( "rus_rus.866" ) ); и wcin.imbue( locale( "rus_rus.866" ) ); ?
Непонятно особенно locale( &quot;rus_rus.866&quot; ).

STL std::set, std::pair, std::make_pair
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы....

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

Std::begin() ,std::end(),std::copy
...// int main() { std::vector&lt;double&gt; data;//Работает cout &lt;&lt; std::begin(data); ...

std::shared_ptr и std::dynamic_pointer_cast, std::static_pointer_cast и т.д
Добрый день. Появился вопрос, операции std::shared_ptr, std::dynamic_pointer_cast,...

Std::bind, std::mem_fun, std::mem_fn
В чем разница между функциями std::bind, std::mem_fun, std::mem_fn?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru