Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/27: Рейтинг темы: голосов - 27, средняя оценка - 4.93
171 / 169 / 1
Регистрация: 22.08.2010
Сообщений: 1,251

Консоль без русского !

22.08.2010, 16:47. Показов 5946. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал учить C++ но сталкнулся с проблемой когда пишу консольную программу русский язык заменяет на непонятно какие буквы подскажите в чём дело ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.08.2010, 16:47
Ответы с готовыми решениями:

После ввода русского слова, на консоль выводятся краказябры
#include <iostream> using namespace std; int main() { setlocale(LC_ALL,"Russian"); string a;

Чтение русского текста в String через консоль
Есть код public class JavaApplication1 { public static void main(String args) throws IOException { String str =...

Не выводит текст в консоль, открывается пустая консоль без текста
Приложение должно вызывать консоль при выполнении каких то условий. В консоль записывается текст и ReadKey чтобы консоль не...

33
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
28.08.2010, 20:56
Студворк — интернет-сервис помощи студентам
Вот мой алгоритм ничего сложного:
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 <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main(void)
{
  FILE *fin, *fout;
  char fname_in[256], fname_out[256], buf[1024], buf_rus[1024];
  printf("Enter a file name: ");
  scanf("%s", &fname_in);
  strcat( strcpy( fname_out, "DOS" ), fname_in );
  if( !(fin = fopen( fname_in, "r" )) )  
    return 1;
  if( !(fout = fopen( fname_out, "w" )) ) 
    return 1;   
  while( fgets( buf, 1024, fin ) )
  {
    CharToOem( buf, buf_rus );
    fprintf( fout, "%s", buf_rus );
  } 
  if( feof( fin ) ) 
    return 1;
  printf("Create \"%s\" file finished.", fname_out);
  getchar();    
  return 0;
}
Добавлено через 15 минут
Например если передать программе файл main.c, то на выходе будет файл DOSmain.c в досовской кодировке.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
28.08.2010, 21:32
Цитата Сообщение от Mencey Посмотреть сообщение
Вот мой алгоритм ничего сложного:
Лучше открывать файл в бинарном режиме, иначе могуть возникнуть разногласия между различными системами.
0
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
28.08.2010, 22:19
Забыл в прошлом варианте закрыть файлы, а за совет с бинарным режимом спасибо вот новая версия, но её я не компилировал:

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
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main(void)
{
  FILE *fin, *fout;
  char fname_in[256], fname_out[256], buf[1024], buf_rus[1024];
  int n;
  printf("Enter a file name: ");
  scanf("%s", &fname_in);
  strcat( strcpy( fname_out, "DOS" ), fname_in );
  if( !(fin = fopen( fname_in, "rb" )) )  
    return 1;
  if( !(fout = fopen( fname_out, "wb" )) ) 
    return 1;   
  while( n = fread( buf, 1024, 1, fin ) )
  {
    buf[n] = '\0';
    CharToOem( buf, buf_rus );
    fwrite( buf_rus, n, 1, fout );
  } 
  if( feof( fin ) ) 
    return 1;
  printf("Create \"%s\" file finished.", fname_out);
  fclose( fin );
  fclose( fout );
  getchar();    
  return 0;
}
0
0 / 0 / 0
Регистрация: 20.08.2010
Сообщений: 8
30.08.2010, 15:50
В учебнике Р. Лафоре по ООП С++ нашел упоминание символьного типа wchar_t. Только там ни чего про него не понятно какой препроцессор ее содержит и как она вообще работает?? может кто знает. Возможно ли с помощью нее решить проблему вывода русского языка ???
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 15:58
Errorman, wchar_t - расширенный символ (юникод). Грубо говоря в char - под символ 1 байт, в wchar_t - 2 байта. С русским не поможет.

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
   std::cout<<sizeof(wchar_t)<<'\n';
   return 0;
}
C++
1
wchar_t Str[]="Привет";
error C2440: 'initializing' : cannot convert from 'const char [7]' to 'wchar_t []'
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
30.08.2010, 16:11
Цитата Сообщение от Lavroff Посмотреть сообщение
wchar_t Str[]="Привет";
wchar_t str[] = L"Привет";
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 16:12
Andrew_Lvov, Извиняюсь) Но проблемы с выводом русского в консоли без манипуляций это не уладит. Верно?
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
30.08.2010, 16:14
Только cout, к-рый вообще-то является екземпляром класса basic_ostream<char>, не умеет работать с строчками типа wchar_t, т.к. это просто тайпдеф на unsigned int (если не ошибаюсь).
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 16:19
Andrew_Lvov, cout и с wstring насколько я понял не умеет работать

Добавлено через 3 минуты
Однако от оно как:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
   _wsetlocale(LC_ALL, L"rus"); 
   std::wstring Str=L"Привет";
   std::cout<<sizeof(char)<<'\n';
   std::cout<<sizeof(wchar_t)<<'\n';
   std::wcout<<Str<<'\n';
   return 0;
}
И аналогично с wchar_t

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
   _wsetlocale(LC_ALL, L"rus"); 
   wchar_t*Str=L"Привет";
   std::cout<<sizeof(char)<<'\n';
   std::cout<<sizeof(wchar_t)<<'\n';
   std::wcout<<Str<<'\n';
   return 0;
}
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
30.08.2010, 16:26
Очевидно, wchar_t затайпдефлен иначе, чем в линуксовских либах. У меня wchar_t cout воспринимает тупо как указатель.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 16:33
Andrew_Lvov, В Си он действительно был затайпдефлен. А в С++ - встроенный
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
30.08.2010, 18:57
Цитата Сообщение от Lavroff Посмотреть сообщение
Andrew_Lvov, В Си он действительно был затайпдефлен. А в С++ - встроенный
Судя по википедии, зависит от компилятора/библиотек. В Вики не рекомендуют использовать для кроссплатформенных аппликаций, но у меня в wchar_t мало опыта, посему трудно сказать.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 21:54
Andrew_Lvov, Страуструп пишет, что по стандарту должно быть встроено. Но тут уж компиляторы как хотят так делают видимо
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
30.08.2010, 22:28
Цитата Сообщение от Lavroff Посмотреть сообщение
Andrew_Lvov, Страуструп пишет, что по стандарту должно быть встроено. Но тут уж компиляторы как хотят так делают видимо
Я был неправ.
Итого, в на линуксе wchar_t - это именно этот тип, а не тайпдеф. Кстати, на тайпдеф typeid вообще ничего не выдаёт. Странно.

Ошибка моя была в попытке вывести wchar_t* через cout. Он же воспринял данные как указатель, выдав в консоль адрес в памяти. Хотя вывод wcout << "Test\n" получился на ура.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.08.2010, 22:28

Без вызова появляется консоль
namespace Project2 { class MainClass { static void Main() { //MyForm form = new MyForm(); ...

Консоль закрывается без ответа
#include &lt;stdio.h&gt; int main() { printf(&quot;Chto posmotret ?\n&quot;); printf(&quot;1.Arrow\n&quot;); printf(&quot;2.Supernatural\n&quot;); ...

Консоль - Вывод текста без остановки
Проблема в том, что когда пишу код типа этого: Writeln('Lol'); Readln; то программа дальше не продолжает свои действия, требует...

Вывести текст в базовую консоль ПК (без ОС)
Здравствуйте! Подскажите пожалуйста, можно ли вывести строку &quot;Hello World!&quot; без операционной системы? Т.е. я скомпилированный файл запущу...

Как очистить консоль , без мигания
Доброго времени суток. Пишу консольную игру на С++ , и нужно постоянно перерисовывать консоль. Но при очистке/записи в консоль...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru