Форум программистов, компьютерный форум CyberForum.ru

Перевод потока из файлового ввода/вывода в консольный ввод/вывод - C++

Восстановить пароль Регистрация
 
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
14.06.2013, 00:32     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #1
Есть кусок программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
freopen ("G:\\input.txt", "r", stdin);
freopen ("G:\\output.txt", "w", stdout);
//Открываем файлы - один для чтения, другой - для записи
 
string a, b;
cin >>a>>b; //Выводим два слова и записываем их в переменные a и b
cout <<a<<" "<<b; //Вводим эти два слова в поток ввода - они запишутся в output.txt
fclose (stdout); //Закрываем поток вывода
 
freopen("CON","w",stdout); //Направляем поток вывода в консоль
 
setlocale(LC_ALL,"Rus");
cout << a <<" "<< b ; //Вводим эти два слова в поток ввода на консоль.
cin.get();
Если в файле будут русские слова, то выводятся кракозябры! А нужно - нормальные русские слова (здесь выводятся два первых слова - a и b). Видимо после переподключения потока не выполняется команда setlocale() и причина этого не понятна...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
14.06.2013, 00:45     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #2
а можно ли полный листинг программы?
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
14.06.2013, 00:53  [ТС]     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #3
Да какой там листинг... это просто тело фунции main и есть...

Добавлено через 59 секунд
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>
#include <cstdlib>
#include <cstdio>
#include <windows.h>
 
using namespace std;
 
int main()
{
    freopen ("G:\\input.txt", "r", stdin);
    freopen ("G:\\output.txt", "w", stdout);
    //Открываем файлы - один для чтения, другой - для записи
 
    string a, b;
    cin >>a>>b;                     //Выводим два слова и записываем их в переменные a и b
    cout <<a<<" "<<b;               //Вводим эти два слова в поток ввода - они запишутся в output.txt
    fclose (stdout);                //Закрываем поток вывода
 
    freopen("CON","w",stdout);      //Направляем поток вывода в консоль
    setlocale(LC_ALL,"Rus");
    cout << a <<" "<< b ;           //Вводим эти два слова в поток ввода на консоль.
    cin.get();                      //ПОКА РАБОТАЕТ ТОЛЬКО АНГЛИЙСКИЙ ТЕКСТ!!!
 
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
14.06.2013, 02:25     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #4
C++
1
2
3
4
5
6
7
8
#include <windows.h>
...
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ...
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.06.2013, 03:56     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #5
Цитата Сообщение от xlxndr Посмотреть сообщение
cin >>a>>b; //Выводим два слова и записываем их в переменные a и b
Вводим.
Цитата Сообщение от xlxndr Посмотреть сообщение
cout << a <<" "<< b ; //Вводим эти два слова в поток ввода на консоль.
В поток вывода.
Цитата Сообщение от xlxndr Посмотреть сообщение
//ПОКА РАБОТАЕТ ТОЛЬКО АНГЛИЙСКИЙ ТЕКСТ!!!
Потому что русского ввода нет.
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
#include <windows.h>
...
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ...
}
И в свойствах консоли выбрать шрифт: Lucida Console.
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
14.06.2013, 14:06     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #6
Зря вы так со стандартными потоками. Не стоит, на мой взгляд, их перенаправлять. А то потом запутаетесь, где у вас ввод из файла, где с клавиатуры, где из строки, а где вообще с сокета. Где-то забудете переключиться на клавиатуру, и не сможете понять, почему ввод не работает. Тем более это надо постоянно переключать один поток на разные источники. И совсем плохо что если вы в одной функции измените источник cin, то это повлияет на все остальные. Вообще мне такая практика напоминает имитацию использования функций с помощью goto вместо того, чтобы просто написать нормальные функции.
Лучше используйте обычные файловые потоки - код сильно упростится и в нем будет меньше противоречий со здравым смыслом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 15:11     Перевод потока из файлового ввода/вывода в консольный ввод/вывод
Еще ссылки по теме:

Переделать из файлового вывода в консольный C++
Консольный ввод-вывод C++
C++ Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
14.06.2013, 15:11     Перевод потока из файлового ввода/вывода в консольный ввод/вывод #7
Я вообще эти потоки использую лишь когда лень с файлами работать, а надо по-быстрому потестить программу. Заккоментировать то всего 2 строчки.
Yandex
Объявления
14.06.2013, 15:11     Перевод потока из файлового ввода/вывода в консольный ввод/вывод
Ответ Создать тему
Опции темы

Текущее время: 09:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru