Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
1

Привязать cout к созданной консоли

29.03.2012, 22:55. Показов 4211. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема вот в чём - создаю Win32 Project в VS, вместо main() используется WinMain().
Создаю консоль через AllocConsole(), но при этом cout остаётся связан не пойми с чем, те в консоль вывод не идёт...
Вопрос:
Как перевести вывод в созданную консоль?
Очень нужно, буду благодарен всем сочувствующим!)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2012, 22:55
Ответы с готовыми решениями:

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

Как вывести символ бесконечности(∞) в консоли с помощью cout
Как вывести символ бесконечности(∞) в консоли с помощью cout?

Смысл знания c++ если н-р в WinAPI нет такого кода как для консоли (cout,.)?
понимаю шарп похожий но прочитав Р.Лафоре-ООП и написав проги в винапи не нашел сходств и смысл от...

Cout <<endl; Что это значит? Если ничего нету в cout?
Здравствуйте ! Обьясните пожалуйста что значит cout &lt;&lt;endl; если он используется после цикла...

22
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.03.2012, 23:28 2
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
*stdout = *stderr = *_fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
3
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
29.03.2012, 23:36  [ТС] 3
Спасибо за наводку, только у меня почему то пишет что _open_osfhandle не определён. Подключать ничего не нужно?
UPD: Подключил io.h, всё компилится, но вывод не идёт, буду продолжать методом научного тыка...
UPD2: Всё заработало, спасибо добрый человек ещё раз=)
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.03.2012, 23:37 4
Цитата Сообщение от Whiteha Посмотреть сообщение
Спасибо за наводку, только у меня почему то пишет что _open_osfhandle не определён. Подключать ничего не нужно?
C++
1
#include <io.h>
1
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
29.03.2012, 23:45  [ТС] 5
Merovingian, если не секрет, как вы узнали об этих функциях? В институте рассказали, сами в книге вычитали, или в интернете отыскали?
Я догадывался о существовании подобного, но сам найти не смог...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2012, 23:55 6
Пробывал сделать тоже в RadStudio 2009 ругается на _fdopen что она делает?
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 00:00 7
Цитата Сообщение от Whiteha Посмотреть сообщение
Я догадывался о существовании подобного, но сам найти не смог...

Не по теме:

Вы наверное в гугле искали, а я в яндексе :)

Яндекс - найдётся всё :good:



Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Пробывал сделать тоже в RadStudio 2009 ругается на _fdopen что она делает?
http://netcode.ru/cpp/?artID=4130

Добавлено через 1 минуту
C++
1
_getchar();
или

C++
1
_getch();
Вроде тоже с подчеркиванием приходится писать..
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.03.2012, 00:10 8
Пишу так
C++
1
2
3
4
5
6
#include<stdio.h>
#include<iostream.h>
#include<io.h>
AllocConsole();
*stdout = *stderr = *fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
std::cout<<"Привет!"<<std::endl;
Компилится, но не выводит в консоль.
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 01:07  [ТС] 9
Avazart, если это копия кода который вы компилируете, то у меня вопрос - как это вообще глотает компилятор, если вы код
C++
1
2
3
4
5
AllocConsole();
 
*stdout = *stderr = *fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
 
std::cout<<"Привет!"<<std::endl;
не в main()'e (или его разновидностях) прописываете?=0
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.03.2012, 01:11 10
Whiteha, так связать count с консольным буфером пробовали?
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 01:21  [ТС] 11
go, пробовал, ведь во втором посте темы дали ответ:
C++
1
*stdout = *stderr = *_fdopen(_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),2),"w");
Насколько я понимаю, cout изначально привязан к stdout, значит stdout нужно привязать к консоли, что код описанный выше и делает.
Те фактически cout можно назвать привязанным к консоли, или я не прав?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
30.03.2012, 01:24 12
Цитата Сообщение от Whiteha Посмотреть сообщение
go, дак ведь во втором посте темы дали ответ:
Не заметил. Правильно, с помощью _fdopen.

Добавлено через 44 секунды
Цитата Сообщение от Whiteha Посмотреть сообщение
Насколько я понимаю,
Почитай здесь http://www.halcyon.com/~ast/dload/guicon.htm
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.03.2012, 02:06 13
не в main()'e (или его разновидностях) прописываете?=0
Писал код в обработчике кнопки.
Консоль пустая появляется.
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 02:18 14
Попробуйте

C
1
FreeConsole();
перед всем этим делом

правда это наверное не из той оперы
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.03.2012, 03:12 15
C++
1
FreeConsole();
Не дает результата
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
30.03.2012, 03:25 16
Цитата Сообщение от go Посмотреть сообщение
Ничего полезного. Единственное что там делают это

C
1
setvbuf( stdout, NULL, _IONBF, 0 );
А так всё аналогично.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
30.03.2012, 10:24 17
а с если использовать только win api , как это будет выгледить?
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
30.03.2012, 14:30  [ТС] 18
Использовать только WinAPI для чего? Для вывода?
Тут есть разные варианты:
WriteConsole(), TextOut(), WriteConsoleOutputCharacter(), ...
Можете глянуть здесь: http://vsokovikov.narod.ru/New... ons_io.htm
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.05.2012, 05:33 19
Пробывал следующее тоже не работает,создает консоль но не выводит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
 
#include <windows.h> 
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
 
BOOL CreateConsole(void)
{
  FreeConsole();        //на всякий случай
  if ( AllocConsole() )
   {
     int hCrt = _open_osfhandle((long)
     GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
     *stdout = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stdout, NULL, _IONBF, 0);
     *stderr = *(::_fdopen(hCrt, "w"));
     ::setvbuf(stderr, NULL, _IONBF, 0);
     return TRUE;
    }return FALSE;
}
Взято с http://inprise.narod.ru/cbuild... faq53.html

В тоже время как просто WriteConsole() работает http://cppbuilder.ru/articles/0110.php
1
884 / 586 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
12.07.2019, 15:19 20
Нашёл вот это: Разбираемся в WinAPI :: Создание и использование консоли, решил попробовать.
Основной код такой же. И тоже не работает. Кто-то в итоге разобрался по какой причине?

У меня Microsoft Visual Studio Community 2019 v16.1.6.
0
12.07.2019, 15:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2019, 15:19
Помогаю со студенческими работами здесь

Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит второй cout
Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит...

В чем разница std::cout и просто cout?
Ребят ,подскажите на простом языке для чайников . В чем разница std::cout и просто cout?

Разница между fwrite, cout и cout.write
Привет. Пытаюсь вывести букву 'ф' в консоль Windows 7, используя кодировку UTF-8. Для этого...

Создать кнопку. Количество нажатий специально созданной кнопки должно отображаться в специально созданной метке
Создать кнопку. Количество нажатий специально созданной кнопки должно отображаться в специально...

Создать кнопку. Количество нажатий специально созданной кнопки должно отображаться в специально созданной метке
Создать кнопку. Количество нажатий специально созданной кнопки должно отображаться в специально...

Как обратиться к программно созданной кнопке, на программно созданной форме?
Ребят, я новичек в программировании, все время создавал кнопки вручную, но тут стало интересно...


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

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