Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
11 / 11 / 2
Регистрация: 23.12.2012
Сообщений: 45
1

Кириллица в консольном приложении

23.12.2012, 16:21. Показов 4312. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Порекомендуйте способ но с условиями:
  • кроме CharToOem() и Oem-подобных функций.

  • setlocale() же выводит кириллицу на ура, но вот с вводом кириллицы в символьные переменные у него проблема.

  • SetConsoleCP() и SetConsoleOutputCP() отлично выводит и вводит кириллицу, но они работают только со шрифтами Lucida Console и Consolas командной строки, но не работают с точечными шрифтами командной строки.

В общем нужен способ, который будет нормально работать на ввод и вывод и совместим со всеми шрифтами командной строки, но при этом без Oem-подобных функций.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2012, 16:21
Ответы с готовыми решениями:

Доступ к данным в консольном приложении CLR Visual C++
Доброго времени суток. Меня интересует следующая проблема. В VS 2012 создаю консольное приложение...

Как в консольном приложении VS С++ использовать классы из .Net
Добрый день. Подскажите пожалуйста как в консольном приложении VS С++ использовать классы из .net....

Компиляция кода на консольном приложении CLR не отображает консоль
VS 2010 при попытке выполнить построение кода на консольном приложении CLR оно выполняется успешно...

Код который работает в консольном приложении в приложении Windows Forms выдает ошибку
Есть код для записи видео с экрана. В консольном приложении он работает, записывает все как нужно....

8
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
11.08.2013, 17:33 2
Оставьте
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
А в настройках окна установите шрифт Lusida Console
0
7 / 7 / 2
Регистрация: 12.08.2012
Сообщений: 96
11.08.2013, 18:56 3
Оставьте:
C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
0
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 18
15.11.2015, 10:47 4
Цитата Сообщение от Rusarch333 Посмотреть сообщение
Оставьте:
C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
т.е. перед каждым принтом 1251, а перед сканом 866?
примерно так?:
C++
1
2
3
4
5
6
char str[];
setlocale (LC_ALL, ".1251");
printf("Ввод строки:");
setlocale (LC_ALL, ".866" );
scanf("%s",str);
printf(str);
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
15.11.2015, 10:51 5
SWDjon, зачем??? Ты устанавливаешь их один раз в начале и все!
0
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 18
15.11.2015, 11:35 6
LC_All - не приемлет, а с LC_TYPE только то что на консоле Writelnom
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <clocale>
 
using namespace System;
 
int main(array<System::String ^> ^args)
{
    setlocale(LC_CTYPE,".1251");
    setlocale(LC_CTYPE,".866");
 
    char str[23];
    printf("Ввод строки:"); // <--это кроко....
    //scanf("%s", &str[23]);
    //printf(str[23]);
    Console::WriteLine(L"Здравствуй, мир!"); //<--это печатает норм соответственно.
    getch();
    return 0;
//Среда VS 2010 C++ Express
Добавлено через 17 минут
если
setlocale(LC_CTYPE,"rus");
//setlocale(LC_CTYPE,".866");
то вывод printf работает норм, а в переменную scanf("%s",&str[23]); идут зякобядры
если слэши вообще убрать, то кроме как Writel-ном ничего по русски.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
15.11.2015, 11:51 7
1.
Цитата Сообщение от SWDjon Посмотреть сообщение
scanf("%s",&str[23]);
Означает, что вводить надо начиная с 23 элемента, а 0-22 останутся старыми
C++
1
scanf("%s",str)
Аналогично - printf

2. Каждое последующее setlocale отменяет действие предыдущей, так что писать две подряд бессмысленно.
1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 18
15.11.2015, 12:05 8
Спасибо, Сергей Сергеевич, только что опробовал, получается, что постоянно менять кодировки перед вводом и выводом соответственно:
C++
1
2
3
4
5
6
7
printf("Ввод строки:\n");
    setlocale(LC_CTYPE,".866");
    scanf("%s",str);    
    printf(str);  
    setlocale(LC_CTYPE,"rus");
    printf("\nПроверка строки");
    getch();
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
15.11.2015, 12:07 9
На Console::WriteLine функция setlocale() вообще не влияет - у .NET свой способ управления локалями. Не забывайте приписывать L и будет вам счастье.
Про printf уже сказали выше.
0
15.11.2015, 12:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2015, 12:07
Помогаю со студенческими работами здесь

Кириллица в консольном приложении C++
Приветствую вас, дорогие друзья. Подскажите пожалуйста, какой код нужно прописать в консольной...

Кириллица в консольном приложении и setlocale()
Люблю Qt, уже привык с ним работать, но мои консольные приложения в нём никак не могут подружиться...

Некорректно отображается кириллица в консольном приложении
Есть код // Рис. 2.7: fig02_07.cpp // Программа вычисления среднего значения. Использует...

кириллица в НЕюникод- приложении.
как показать? когда-то находил какой-то фонт, который отображал вторую половину аски-таблицы...


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

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