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 |