С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 25

Не работает CharToOem в Microsoft Visual C++ 2010 express

05.05.2017, 12:51. Показов 2873. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Не работает CharToOem в Microsoft Visual C++ 2010 express.
А также все другие варианты работы с русской строкой в программе.
CharToOem переводит char s[]="абба" в "____"
У меня windows-7 Home Premium английская - пакета русского языка нет (на эту Home Premium нельзя русский язык установить - да мне это и не нужно - мне не надо user interface винды руссифицировать).
Кстати - есть еще одна неприятность - когда переключаю раскладку клавиатуры (Alt-Lshift) - русские буквы появляются
во всех приложениях только со второго нажатия на русскую клавишу - это что-то мне не нравится. Может в этом дело?
Крутые спецы по русскому языку в англоязычной винде-7 есть тут?
Все пробовал. В свойствах консоли шрифт - Lucida Console (не помогает тоже). Вот тестовая программа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <windows.h>
#include <locale>
#include <iostream>
#include <string.h>
using namespace std;
char s[] = "абба", s1[20];
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");
    CharToOem((LPCWSTR)s, (LPSTR)s1);
    //вариант CharToOemA(s, s1);  also does not work (((
    for (int i = 0; i < strlen(s1); i++)
        if (s1[i] == 'а')
            s1[i] = 'б';
    cout << "\n" << s1 << "\n";
    system("pause");
    return 0;
}
Выход прг:
____
Press any key to continue.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2017, 12:51
Ответы с готовыми решениями:

Не работает ввод русского текста в Microsoft Visual C++ 2010 express
Здравствуйте! Не работает ввод русского текста в Microsoft Visual C++ 2010 express. С выводом разобрался. Вывод русского текста в прг...

microsoft visual studio 2010 express
я установил microsoft visual studio 2010 express создаю файл cpp и набираю код не могу его скомпилировать. Как это сделать? Заранее...

Накрылся Microsoft Visual C++ 2010 Express
В процессе выполнения программы завис компьютер, диспетчер задач не помог, пришлось выключать комп. После открываю листинг программы, а...

8
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.05.2017, 13:02
Цитата Сообщение от ivan555666 Посмотреть сообщение
русские буквы появляются
во всех приложениях только со второго нажатия на русскую клавишу
А винда случайно не зверь-торрент едишн?
То есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <clocale>
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char s[] = "абба";
    cout << s << "\n";
    system("pause");
}
не помогает?
0
21 / 21 / 10
Регистрация: 11.09.2015
Сообщений: 103
05.05.2017, 13:12
ivan555666, работает как надо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
// cl /EHsc /W4 OEM.cpp User32.lib
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
 
void main () { 
  char s[] = "абба", s1[20]; // СodePage 1251
  CharToOemA (s, s1);        // CodePage  866
  cout << s1 << "\n";
  system("pause");
}
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 25
05.05.2017, 13:18  [ТС]
Спс MrGluck
ваш вариант выводит вот что : (не могу точно воспроизвести буквы - они не русские - но похожие - греческие) "alpha,beta(big),beta(big),alpha" - ( скриншот почему-то не могу загрузить - этот сайт пишет "нет маркера безопасности" - не понимаю - что это - ну да это мелочь.).
Меня такие буквы не устраивают.
Тут явно что-то системное - но что? не могу понять. Может вы знаете - где в реестре покопаться?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.05.2017, 13:23
Лучший ответ Сообщение было отмечено ivan555666 как решение

Решение

Максимум, что можно сделать - это через "Control Panel" зайти в "Region and Language" и
там в "Administrative / Language for non-Unicode programs" выбрать русский язык.
После чего перезагрузиться. Иных способов корректно и без долгих приседаний
решить проблему нет.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.05.2017, 13:26
ivan555666, а кодировка какая у исходников?
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 25
05.05.2017, 14:02  [ТС]
спс мр Kudryashov_R_D
На вашем компе - допускаю - работает (возможно, у вас стоит русскоязычная винда), но на моем - нет.
Ваш вариант программы вывел:

____
Press any key to continue.

То есть "абба" преобразовалась в 4 подчеркивания.
Тут ( возможно я не прав) явно что-то с ОС. Но что?
Моя система windows-7 англоязычная. Русский язык выставлен в control panel.
Тут нужен крутой специалист в англоязычной windows-7.
Вы такой?
Обратите внимание: я могу писать по-русски - но в visual studio не идет.
Есть подробности: если отключить CharToOemA, то при проходе по шагам в прг видно, что все русские char показываются в дебаге как именно руские т.е. ОК.
Не работает только конечный cout, хотя строка, которая подается на cout - смотрится нормально по-русски в отладчике.
Но сам cout выводит уже не по-русски. Вам это о чем-то говорит?

Добавлено через 30 минут
спс мр Убежденный!
Ваша рекомендация (исправить в control panel) помогла !
Теперь выводится кирилица - ОК.
Но... не вводится.
См. новый вариант моей тестовой прг.
"а" заменяется на "б" ОК (в строке, зашитой в прг) и выводится по-русски ОК
Но когда ввожу русский текст - а потом его вывожу, то выводятся кракозябры.
Можете с этим помочь?
Кстати - интересно - если подключить закоментированные строки ( SetConsoleOutputCP(1251); и CharToOemA(s, s1); )
то даже вывод из зашитой русской строки не работает - почему?. Если их отключить - то вывод ок. Но русский ввод по прежнему не работает.
Вот текст прг:
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
#include "stdafx.h"
#include <windows.h>
#include <locale>
#include <iostream>
#include <string.h>
using namespace std;
char s[] = "абба - лучшая агруппа - eto tochno!!!", s1[100];
 
int _tmain(int argc, _TCHAR* argv[])
{
    // SetConsoleCP(1251);
    // SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");
    // CharToOem((LPCWSTR)s, (LPSTR)s1);
    // CharToOemA(s, s1);  //also does not work (((
    for (int i = 0; i < strlen(s); i++)
        if (s[i] == 'а')
            s[i] = 'б';
    cout << "\n" << s << "\n";
    cout << "\nА теперь введите русский текст = \n";
    gets(s1); // (или cin>>s1 - тоже не работает
    cout << "\n" << s1 << "\n"; // вывод: кракозябры
    system("pause");
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
05.05.2017, 14:40
Если строки 11-12 используешь, то 13-ю убрать и поменять шрифт консоли.
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 25
05.05.2017, 15:38  [ТС]
Спасибо ncf!
Действительно:
сделал вот так
C
1
2
3
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
//    setlocale(LC_ALL, "Russian");
+ поставил в свойствах консоли Lucida Console и все заработало ( и вывод и ввод русских букв ОК).
Но... интересно что ввод идет только с пом. gets(s1) а cin>>s1 возвращает в s1 только первую букву вводимой русской строки. Можете объяснить - почему так? Мне нужен форматированный ввод руского текста.
s1 у меня определено так: char s1[100];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2017, 15:38
Помогаю со студенческими работами здесь

Microsoft visual express 2010. Скомплилированный заголовок
Здравствуйте, товарищи =) Недавно стал изучать C++ по книге Прата С. Сейчас столкнулся с некоторым непониманием. Что значит...

Microsoft Visual C++ 2010 Express Не подчёркивает ошибки в коде
Только начал учить C++, до того учил delphi. Не могу разобраться с компилятором: гон не подчёркивает красным ошибки в коде, как это делает...

Видеоуроки по Microsoft Visual C++ 2010 Express для новичка
Посоветуйте хорошие видеоуроки по Microsoft Visual C++ 2010 Express для новичка.

Чем отличается Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate
Подскажите пожалуйста, в чем разница Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate. Всем ответившим большое спасибо)))

Самоучитель Microsoft Visual Basic 2010 Express.
Кто нибудь может подсказать где скачать самоучитель по Microsoft Visual Basic 2010 Express ? Электронную бесплатную книгу на подобе...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru