Перейти к содержимому

Conio h чем заменить

  • автор:

Conio h чем заменить

Проблема с несовместимыми conio.h до сих пор часто всплывает при адаптации старых программ под Studio, применил вчера-сегодня вполне простое и адекватное решение.

Взять вот отсюда оба файла, включить в проект, заинклудить

#include "coniow.h"

#include

Конечно, рамочек из псевдографики в Юникодовском проекте не будет, придётся заменить на » * «, к примеру. Ну и вставку asm <> , не работающую в Studio, убрать.

Для корректного отображения русских букв при выполнении программы нужно щелкнуть правой кнопкой мыши по заголовку консольного окна, в контекстом меню выбрать пункт «Свойства» и установить шрифт «Lucida Console» и желаемый размер шрифта. Далее нажать кнопку OK. В XP возникает диалог с 2-мя вариантами — нужно сохранить настройки для всех окон с тем же именем, чтобы не выполнять эту настройку повторно.

Также убедитесь, что файл действительно сохранён в Юникоде (UTF-8, кодовая страница 65001).

Ну и все возможные варианты русификации консоли тоже подключены 🙂 В сумме, вот такой «борландовский консольный интерфейс» условно работает, исходник:

#include #include #include #include #include #include "coniow.h" typedef void (* FUN) (void); //Указатель на функцию void функция(void) - они будут выполнять пункты меню typedef struct ITEM < //Структура для элемента меню int x,y; //Столбец и строка консоли, куда выводим строку меню char *str; //Наименование пункта меню FUN f; //Функция, привязанная к пункту меню >; typedef struct WINDOW < //Окно вывода для всех функций int x1,y1,x2,y2,back,color; //Координаты двух углов, фоновый цвет, цвет вывода >; void Exit () < //Восстановить консоль по умолчанию и выйти window (1,1,80,25); textbackground(BLACK); textcolor(LIGHTGRAY); clrscr(); exit(0); >void flush () < //Очистить буфер клавиатуры fflush(stdin); >void DrawWindow (WINDOW w) < //Нарисовать окно w char c[]=; window (1,1,80,25); textbackground(w.back); textcolor(w.color); gotoxy (w.x1-1,w.y1-1); cprintf ("%c",c[0]); for (int i=w.x1; i gotoxy (w.x1-1,w.y2+1); cprintf ("%c",c[5]); for (int i=w.x1; i void DrawMenu (int n,ITEM *m,WINDOW w) < //Управление меню int sel=0,back=WHITE,inactivecolor=DARKGRAY,activecolor=RED; DrawWindow (w); //Нарисовать окно textbackground(back); //Поставить цвет фона меню for (int i=0; iwhile (1) < //Бесконечный цикл обработки нажатий клавиш gotoxy(m[sel].x,m[sel].y); textcolor(activecolor); cprintf ("%s",m[sel].str); //Перепечатать активный пункт выделенным цветом flush(); //очистить буфер клавиатуры int ch=getch(); //Жд)м нажатия клавиши gotoxy(m[sel].x,m[sel].y); //Сбросили цвет активного пункта textcolor(inactivecolor); cprintf ("%s",m[sel].str); if (!ch) < //Это расширенный код? ch=getch(); //Прочитать его switch(ch) < //Обработка расширенных кодов клавиш case 72: case 75: if (sel) sel--; else sel=n-1; break; //Стрелки вверх и влево case 80: case 77: if (sel> else < //Обработка не-расширенных кодов клавиш switch(ch) < case 13: //Нажата Enter textbackground(w.back); //Поставить фон и цвет окна функций textcolor(w.color); window (w.x1,w.y1,w.x2,w.y2); //Выводить будем в окно функций m[sel].f(); //Вызов функции, закрепленной за пунктом меню clrscr(); //Убрать, если не очищаем окно после выхода из функции textbackground(back); //Восстановить фон и окно во весь экран window (1,1,80,25); break; case 27: Exit(); //По Esc всегда выход из приложения >> > > //Ниже начинается часть пользователя void File() < //Функция по меню File - пока ничего не делает long int i=0; //Печатать из функций лучше через cprintf while (!kbhit()) < delay (200); cprintf ("Работа функции File, шаг %ld\r\n",++i); >> void Do() < //Функция по меню Do - пока ничего не делает cprintf ("Введите целое число: "); int d; cscanf ("%d",&d); //Вводить из функций лучше через cscanf cprintf ("\r\nВы ввели значение %d\r\nНажмите клавишу для выхода. ",d); getch(); getch(); >void main () < setlocale (LC_ALL,"Russian"); setlocale(LC_CTYPE, ".65001"); SetConsoleCP(65001); SetConsoleOutputCP(65001); //Пример для горизонтального меню ITEM menu1[3]=< //Описали меню , , >; WINDOW w=; //Описали окно вывода функций clrscr(); DrawMenu (3,menu1,w); //Вызвали главную функцию системы /* //Пример для вертикального меню ITEM menu1[3]=< //Описали меню , , >; WINDOW w=; //Описали окно вывода функций textbackground (WHITE); clrscr(); DrawMenu (3,menu1,w); //Вызвали главную функцию системы */ >

Оба файла в той версии, что использовал, архив .zip:

  • на всякий случай переименовал coniow.c в coniow.cpp ;
  • поставил первой строкой coniow.cpp директиву

#define _NO_CRT_SECURE_WARNINGS
buffer = malloc ( .
buffer = (CHAR_INFO*)malloc (

P.P.S. Прикреплённый ниже архив с coniow.c и coniow.h также работает в Visual Studio 2015, например, следующий исходник ( main.cpp из архива):

#define _CRT_SECURE_NO_WARNING #include #include «coniow.h» using namespace std; int main()

12.04.2015, 16:24 [12741 просмотр]

Форум русскоязычного сообщества Ubuntu

Страница сгенерирована за 0.044 секунд. Запросов: 25.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

библиотека в с++ которая смогла бы заменить conio.h

windows.h не подходит так как слишком бьольшая и учитывая что мне нужно всего несколько функций не вижу смысла изучать полностью
конИО не могу использовать так как пользуюсь дев с++
если кто знает бесплатные компилеры для с++ которые имеют встроенную конИО
то ю ар велкам

Дополнен 13 лет назад
дев с++ компилятор
ОС винда
Лучший ответ

Библиотека conio.h была написана борландом для MS DOS.Ставь себе DOS и не парься. А если тебе хочется пользоваться всё таки windows,то забудь про conio.h.Консоль винды -это только эмулятор DOS,а по-сему conio.h поддерживается частично. Полноценная альтернатива под виндой — это только использование API из windows.h.Да и кому нужна теперь conio.h?Консоль-это средство администрирования. Ваять свистелки и перделки в консоли глупо. Всё это можно сделать в винде намного красивей и шустрей.

Добавлю, для понимания. Консоль windows-это полноценное окно современной винды. Оно только выглядит как консоль, но в нём всё работает через WinAPI.А conio.h писалось для MS DOS.Там всё работало с использованием других API.По-этому чтоб реализовать возможности из conio.h нужно теперь использовать ресурсы windows.h

Conio h чем заменить

Бодрого времени суток!

Недавно перешел на Linux и учусь пользоваться g++. В целом все неплохо, но вот вопрос: есть ли в g++ альтернатива библиотеки conio.h?

И еще хотелось бы узнать альтернативы следующих команд:

system("cls"); //Очистка экрана из Windows.h getch(); system("pause"); //Пауза из Windows.h
Tema_Crazzzy
Посмотреть профиль
Найти ещё сообщения от Tema_Crazzzy

Форумчанин
Регистрация: 26.04.2010
Сообщений: 328

ncurses
если нет, то :
getchar() — написать самому, благо есть примеры в гугле

Про system :
man clear
man sleep

Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
Форумчанин
Регистрация: 29.04.2010
Сообщений: 114
Спасибо! Про sleep я разобрался а как использовать в коде clear я не понял.

Tema_Crazzzy
Посмотреть профиль
Найти ещё сообщения от Tema_Crazzzy

Форумчанин
Регистрация: 26.04.2010
Сообщений: 328

Если без ncurses, то можно глупо :
system( «clear» );
Гораздо бы умнее было бы посмотреть исходники clear и сделать как там.
если с ncurses, то :
man 3 clear

Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
Форумчанин
Регистрация: 29.04.2010
Сообщений: 114
Еще раз премного благодарен. ))

Tema_Crazzzy
Посмотреть профиль
Найти ещё сообщения от Tema_Crazzzy
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
conio.h в dev c++ olegnaum Общие вопросы C/C++ 8 18.04.2010 10:54
Замена Яр|/|| < (^_^) Паскаль, Turbo Pascal, PascalABC.NET 3 22.09.2009 13:25
Передача массива структур в функцию, conio.h, и графика. jojahti Общие вопросы C/C++ 1 01.08.2009 21:35
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Замена Dr.Badnezz Общие вопросы Delphi 11 23.09.2008 17:17

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *