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

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

  • автор:

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

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

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

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

Замена «conio.h» и «gotoXY» в Xcode

Здравствуйте. В программе мне необходимо использовать команду gotoXY, но Xcode говорит что не знает такую команду, а библиотека conio.h отсутсвует. Можно ли чем-то заменить? Или же придется «грешить» и ставить винду на мак?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

в xcode
Знаю, что эта проблема обсуждалась уже много раз, но к сожалению я так и не смогла разобраться.

Замена генерации случайных чисел через tchar в xcode
Добрый день, у меня есть задание: // 1) Сформировать одномерный массив.

Ошибка в Xcode (версия Xcode 8.3.3)
Здравствуйте! Xcode выдаёт ошибку (11 db)! Что с ней делать? Кто знает, дайте совет) .

conio.h
где можно скачать библиотеку conio.h под линукс? с компилятором g++ не шла. Я все пакеты.

Си gotoxy();
#include <conio.h> #include <stdio.h> int monitor(int x,int y) < int a; int i,j; .

Аналоги библиотек bios.h и conio.h в linux

Ленты новостей

Приветствую всех пользователей самой правильной ОСи!
Знает ли кто нибудь аналоги библиотек bios.h и conio.h в linux?
Гугл ответов не дал. На ЛОРе предлогали сделать через перехват управления клавиатурой, но такой вариант меня не устраивает,
так как при аварийном завершении программы будет потеряно управление клавиатурой.
Если есть на форуме опытные программеры, подскажите что нибудь.

    Для комментирования войдите или зарегистрируйтесь

За время участия в нашем

Автор NightNord, дата создания 22 апреля, 2010 — 21:49.

За время участия в нашем сообществе вы могли бы уже научится спрашивать решение _проблемы_, а не вашего видения этой проблемы.

По делу: я понятия не имею, что делают заголовочные файлы bios.h и conio.h (т.к. никогда не программировал под не лучшую в мире ОС =)), зачем они нужны, но подозреваю, что делает много и разного. Также я подозреваю, что bios.h предоставляет какие-то функции работы с биосом напрямую. Тут вы обломитесь, ибо это не ДОС и тут доступ до железа, в т.ч. до железного firmware (в т.ч. до BIOS), запрещен. Даже если вы как-то хитро попробуйте извернуться и таки получить доступ до железа напрямую, результатом будет только то. что ядро убьет ваш нерадивый процесс.

И это, заметьте, правильно и решает очень многие проблемы дос-подобных систем. Так что, с 99% вероятностью, вам такой функционал не нужен. Скажите что вам нужно сделать, быть может вам подскажут какой функционал для этого можно (нужно) использовать. Ну или если вы хотите огрести радости на свою буйную голову — можете написать модуль для ядра, там можно делать все и как угодно. В т.ч. там наверняка есть какие-то педали для управления биосом и клавиатурой.

P.S. «так как при аварийном завершении программы будет потеряно управление клавиатурой.». а) не надо писать программы с расчетом на аварийное завершение. б) когда программа завершается, по любым причинам, любое управление ей чего-либо должно быть прекращено. Или вы что-то иное имели ввиду?

  • Для комментирования войдите или зарегистрируйтесь

Попытаюсь объяснить что

Автор LinAdmin, дата создания 22 апреля, 2010 — 22:20.

Попытаюсь объяснить что конкретно мне надо.

Функция Интерфейс с клавиатурой при помощи функций BIOS. Синтаксис #include int bioskey(int cmd); Файл, содержащий bios.h прототип Описание bioskey посредством прерывания BIOS 0x16 выполняет различные операции c клавиатурой. Параметр cmd определяет операцию. Возвращаемое Значение, возвращаемое функцией bioskey, зависит от значение выполняемой операции, которая определяется аргументом cmd: --------------------------------------------------- cmd Операция --------------------------------------------------- 0 Если младшие 8 бит не нулевые, bioskey возвращает код ASCII следующей нажатой клавиши, ожидающей в очереди. Если младшие 8 битов равны 0, то старшие 8 битов содержат расширенные коды клавиатуры, описание которых вы можете найти в документе "Техническое справочное руководство по IBM PC". 1 Производится проверка, имело ли место нажатие клавиши. Если при проверке возвращается значение 0, это означает, что клавиша не была нажата. В противном случае возвращается значение очередной нажатой клавиши. Сам же код очередной нажатой клавиши сохраняется и будет возвращен при следующем вызове функции bioskey при значении параметра cmd, равном нулю. 2 Запрашивает текущий статус клавиш типа SHIFT. Значение получается при логическом сложении следующих кодов (операции "ИЛИ") Бит 7 0x80 INSERT нажат Бит 6 0x40 CAPS нажат Бит 5 0x20 NUM LOCK нажат Бит 4 0x10 SCROLL LOCK нажат Бит 3 0x08 ALT нажат Бит 2 0x04 CTRL нажат Бит 1 0x02 LEFT SHIFT нажат Бит 0 0x01 RIGHT SHIFT нажат Переносимость bioskey поддерживается только на компьютерах IBM PC или совместимых с ними. Пример: #include #include #include #define RIGHT 0x0001 #define LEFT 0x0002 #define CTRL 0x0004 #define ALT 0x0008 int main(void) < int key, modifiers; /* Функция 1 возвращает 0, пока не будет нажата клавиша. Ожидание ввода. */; /* now use function 0 to get return value of while (bioskey(1) == 0); /* Теперь используем функцию 0, чтобы получить значение клавиши */ key = bioskey(0); /* Используем функцию 2, чтобы определить, используются ли клавиши типа SHIFT */. modifiers = bioskey(2); if (modifiers) < printf("["); if (modifiers & RIGHT) printf("RIGHT "); if (modifiers & LEFT ) printf("LEFT "); if (modifiers & CTRL ) printf("CTRL "); if (modifiers & ALT ) printf("ALT "); printf("] "); >/* вывести символ нажатой клавишу */ if (isalnum(key & 0xFF)) printf("'%c'\n",key); else printf("%#02x\n",key); >

мне эта библиотека нужна для навигации по графическому интерфейсу (как у mc).

conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX. Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы. Большинство компиляторов языка Си, предназначенных для DOS, Windows 3.x, Phar Lap, DOSX, OS/2 или Win32 имели этот файл и обеспечивали сопутствующие библиотечные функции в библиотеке Си по умолчанию. Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.

от этой библиотеки мне нужна функция int getch(void) которая считывает символ напрямую из консоли без использования буфера и echo-вывода.

Если ничего не помогает, прочти наконец инструкцию.

  • Для комментирования войдите или зарегистрируйтесь

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 [12671 просмотр]

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

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