Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/100: Рейтинг темы: голосов - 100, средняя оценка - 4.63
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
1

Как с консоли записать в файл русский текст

16.02.2009, 00:58. Показов 20190. Ответов 15
Метки нет (Все метки)

Как с консоли записать в файл русский текст?
Если так, то пишется только английский:

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 <iostream>
using namespace std;
int main ()
{
    setlocale (LC_ALL,".1251");
    char filename [50];
    char str [100];
    cout << "Введите имя создаваемого файла\n";
    cin.getline (filename, 50);
    FILE* f;
    if (!(f = fopen (filename, "wt")))
    {
        cout << "Ошибка создания файла\n";
        return 1;
    }
    cout << "Введите данные\nдля окончания ctrl+z\n";
    while (! feof (stdin))
    {
        cin.getline (str, 100);
        fprintf (f, "%s", str);
        fprintf (f, "\n");
    }
    fclose (f);
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2009, 00:58
Ответы с готовыми решениями:

Как записать русский текст в файл?
std::ofstream m_fOutput(PathFile); std::string Error = &quot;Ошибка открытия файла&quot;; if...

Как записать русский текст в xls-файл?
С помощью модулей xlrd/xlwt открываю xls таблицу, вношу какие-нибудь изменения, сохраняю измененные...

Записать в файл русский текст
Никак не могу записать в файл русский текст через fprintf, записываются каракули. Использую Linux...

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой...

15
Эксперт С++
3184 / 865 / 39
Регистрация: 29.12.2008
Сообщений: 952
16.02.2009, 11:16 2
В цикле добавьте одну строчку, это решит проблему.
Код
while (! feof (stdin))   
    {   
        cin.getline (str, 100);
		OemToCharA(str,str); //вот эта строчка выполняет нужное преобразование
        fprintf (f, "%s", str);   
        fprintf (f, "\n");   
    }
0
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
16.02.2009, 23:42  [ТС] 3
А там точно ничего подключить не нужно?
У меня выдаёт сообщение: 'OemToCharA': identifier not found.
0
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
16.02.2009, 23:57 4
1) надо просто CharToOem
2)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <windows.h>
#include <winuser.h>
char* rus(const char* text) 
{
 char *bufRus=new char[strlen(text)];
 CharToOem(text, bufRus);
 return bufRus;
}
int main()
{
 cout<<rus("Привет")<<endl;
 return 0;
}
0
Эксперт С++
3184 / 865 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.02.2009, 09:25 5
Цитата Сообщение от qwert Посмотреть сообщение
А там точно ничего подключить не нужно?
У меня выдаёт сообщение: 'OemToCharA': identifier not found.
Ах да, <windows.h> нужно подключить, я забыл.

К предыдущему:
В задаче нужно не в консоль вывести русский текст, а из консоли в файл, поэтому преобразование обратное, не CharToOem, а OemToCharA.
1
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
17.02.2009, 14:46  [ТС] 6
Спасибо!
0
4855 / 3276 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
18.02.2009, 05:42 7
если в notepad.exe квадратики

Код
        fprintf (f, "\n");
Код
        fprintf (f, "\r\n");
(касаемо только файлов, консоль нормально преобразует)
0
Gera_Alyona
20.08.2009, 16:39 8
спасибо
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.08.2009, 17:36 9
У меня твоя прога не работает...ввожу текст хоть и на англ но в тексте ниче не записывает.
а вот как делать что бы на русском писала..сам это использую


Код
// установить вручную шрифт Lucida Console в свойствах окна консоли 
// и запомнить это для всех окон с этим именем
// записать в начале программы строку 
 #include <windows.h>
// записать в начале функции main ( после строки с символом { ) 
// две следующих строки 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
Добавлено через 5 минут 13 секунд
вот мой код,правда записывает после энтера,а не как у тебя-после ctrl+z
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
31
32
33
34
#include "stdafx.h"
#include <iostream>
using namespace std;
// установить вручную шрифт Lucida Console в свойствах окна консоли 
// и запомнить это для всех окон с этим именем
// записать в начале программы строку 
 #include <windows.h>
// записать в начале функции main ( после строки с символом { ) 
// две следующих строки 
 
 
 
 
 
using namespace std;
int main ()
{
  SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
        char filename [50];
        char str [100];
        cout << "Введите имя создаваемого файла\n";
        cin.getline (filename, 50);
        FILE* f;
f = fopen (filename, "wt");
 
 
                cin.getline (str, 100);
                fprintf (f, "%s", str);
                fprintf (f, "\n");
        
 
        return 0;
}
Добавлено через 32 секунды
и на русском тоже
0
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
21.08.2009, 11:32 10
Вот тут мое решение https://www.cyberforum.ru/post246680.html
Темы похожие.
0
Заблокирован
Автор FAQ
21.08.2009, 11:38 11
Я для себя функцию когда-то сделал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
void ru_printf(const char * fmt, const char * str)
{
    char *chBuf;
    if(0 < strlen(str))
    {
        chBuf = (char *)malloc((strlen(str))*sizeof(char));
        sprintf(chBuf,"%s",str);
        CharToOem((LPCTSTR)chBuf,chBuf);
        printf(fmt,chBuf);
        chBuf = (char *)realloc(chBuf,1);
    }
}
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
23.08.2009, 14:58 12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
void ru_printf(const char * fmt, const char * str)
{
char *chBuf;
if(0 < strlen(str))
{
chBuf = (char *)malloc((strlen(str))*sizeof(char));
sprintf(chBuf,"%s",str);
CharToOem((LPCTSTR)chBuf,chBuf);
printf(fmt,chBuf);
chBuf = (char *)realloc(chBuf,1);
}
}
Error 2 error C2065: 'LPCTSTR' : undeclared identifier d:\Projects\helps\helps\helps.cpp 19 helps
Error 3 error C2146: syntax error : missing ')' before identifier 'chBuf' d:\Projects\helps\helps\helps.cpp 19 helps
Error 4 error C2059: syntax error : ')' d:\Projects\helps\helps\helps.cpp 19 helps
Error 5 error C3861: 'CharToOem': identifier not found d:\Projects\helps\helps\helps.cpp 19 helps

0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
23.08.2009, 14:59 13
-=ЮрА=-, а это точно ты написал?
0
Maniac
Эксперт С++
1456 / 957 / 159
Регистрация: 02.01.2009
Сообщений: 2,816
Записей в блоге: 1
23.08.2009, 15:08 14
@lex, #include <windows.h> и ошибок не будет..
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
23.08.2009, 17:06 15
-=ЮрА=- не лучший пример для новичка.
0
Maniac
Эксперт С++
1456 / 957 / 159
Регистрация: 02.01.2009
Сообщений: 2,816
Записей в блоге: 1
23.08.2009, 17:41 16
Цитата Сообщение от @lex Посмотреть сообщение
-=ЮрА=- не лучший пример для новичка.
Нормальный пример..
-=ЮрА=-, Так как не все понимаю код - делай к ним минимальные примеры работы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2009, 17:41

Записать текст из консоли в файл
Написать программу выводящую текст в файл (system(&quot;echo text &gt;&gt; text.txt&quot;) не подходит, так как...

Записать текст с консоли в файл
Как сделать что бы данная строка не прерывала вывод в консоль, но при этом продолжала записывать в...

Русский текст в консоли
Мне нужно чтобы когда я напишу свое имя по русски и оно выводиться по русски у меня не выходит так...

Русский текст в консоли
Пользуюсь книгой для обучения visual с++, дан базовый код #include &lt;iostream&gt; using std::cout;...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.