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

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

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

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

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

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

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

15
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
24.01.2013, 09:13
Конструктор класса std::locale, принимающий имя локали, генерируют исключение std::runtime_error, если не обнаруживают локали на системе.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
24.01.2013, 18:50  [ТС]
Покажите пожалуйста, как перехватить это исключение
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
24.01.2013, 19:24
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  [ТС]
А подскажите throw тогда в каких случаях нужно применять?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.01.2013, 21:27
xtorne21st, когда исключение не генерируется автоматически.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
24.01.2013, 21:55  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
xtorne21st, когда исключение не генерируется автоматически.
А как узнать когда оно автоматически генерируется, а когда нет?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.01.2013, 22:03
xtorne21st, читать спецификацию класса
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
24.01.2013, 22:14
Цитата Сообщение от xtorne21st Посмотреть сообщение
Как кинуть исключение std::locale::global(std::locale("");
Что за исключение такое?
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.01.2013, 22:50  [ТС]
Цитата Сообщение от 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
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
28.01.2013, 01:21
Цитата Сообщение от xtorne21st Посмотреть сообщение
А в конце ветки catch нужно ли использовать return -1 или программа сама завершит своё выполнение?
Логика уже на ваше усмотрение. Мне кажется, что ошибка восстановима и работу программы можно продолжить, но я не пробовал.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
28.01.2013, 12:40
Цитата Сообщение от xtorne21st Посмотреть сообщение
А в конце ветки catch нужно ли использовать return -1 или программа сама завершит своё выполнение?
Нет. Не завершит. Мы для этого и перехватываем исключение. Если хотите аварийное завершение, то пробросте его дальше.
1
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 13:48
xtorne21st, исключение - это для программиста. Если хотите выйти, то выходите ручками
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 14:11  [ТС]
Цитата Сообщение от go Посмотреть сообщение
Нет. Не завершит. Мы для этого и перехватываем исключение. Если хотите аварийное завершение, то пробросте его дальше.
Я просто читал, что вроде есть исключения, которые завршают выполнение программы: толи после всех веток catch, толи ещё какие-то случай - точно не знаю...

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

Добавлено через 29 секунд
Кстати, насчет исключений, я правильно понимаю, что они выходят "насквозь" через все функции, пока не достигнут отловщика/пока функции не кончатся ?
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 14:48  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2013, 14:48
Помогаю со студенческими работами здесь

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

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

Объясните, что означает 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> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru