Как будет работать программа без заголовочного файла conio h
I usually use VS but trying cygwin for the first time. I am using windows 7 but on compiling hello world program using gcc, it says "fatal error: conio.h: no such file or directory".
I am using Windows 7 and it seems conio.h is missing from my system. Can someone please tell me how to resolve this issue.
Simple answer: Don't use it. If this doesn't help you: What function from
@haccks : conio is not exclusive to Turbo C++, Microsoft's VS2013 continues to to provide a conio API, which appears to be what he was previously using - of course not being standardised, it differs from Borland's conio!
I know..I am not using it. I needed a replacement for getch() and am now using getchar(). I was just curious is knowing as to why it wouldnt work Thanks!!
2 Answers 2
In Cygwin there doesn't exist any such header file called conio.h ! Also, you don't need it either because it automatically holds screen for you without using getch() and for clrscr() you do have system("clear") in Cygwin!
@Shekhar..Thanks!! But the output screen is not holding. Thats why I was forced to use getch() and run into this missing conio.h trouble.
@SatyaAshokKumar-That's probably because of your code error or something like infinite loop. Please try executing hello world program and then comment!
@SatyaAshokKumar: You say "the output screen is not holding". Do you mean that the terminal window is vanishing immediately after the program runs? You can avoid that by running the program from a command line rather than by double-clicking its icon.
conio not being part of the standard library, you cannot expect it to be available cross-platform, or even between compilers on the same platform.
Being, non-standard, the name conio has been used by both Borland and Microsoft for libraries with differing APIs - Microsoft's is much smaller. So for that reason you might avoid it for portability.
It is not a matter of conio not being on Windows, Cygwin is a POSIX API layer and tool-chain for building and running POSIX code on Windows. The libraries provided with it are independent of those provided with Visual Studio.
There are a number of solutions including:
- Use an alternative console I/O library, such as ncurses.
- Use a conio source code implementation for Linux such as this (which uses ncurses and implements Borland's API).
The second solution is perhaps useful if you have a lot of legacy code using conio, but is overkill if you just want to prevent a console windows from closing. For that you could just use getchar() in any case and accept that you will have to press enter rather than any key.
If you are using Cygwin just to be able to use GCC on Windows, you might be better off using MinGW/GCC instead. This uses Microsoft's C runtime rather than GNU, and the Win32 API rather than POSIX.
conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX.
Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы. Большинство компиляторов языка Си, предназначенных для DOS, Windows 3.x, Phar Lap, DOSX, OS/2 или Win32 имели этот файл и обеспечивали сопутствующие библиотечные функции в библиотеке Си по умолчанию. Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.
Библиотечные функции, объявленные в conio.h, весьма различались в зависимости от компилятора. Первоначально реализованные в Microsoft Visual C++ различные функции привязывались напрямую к нескольким первым функциям DOS, связанным с прерыванием 21h. Но библиотека, поставляемая с Turbo C++ и Borland C++, не использует DOS API, а вместо этого напрямую обращается к видеопамяти для вывода информации и использования сигналов прерывания BIOS.
Компиляторы, предназначенные для операционных систем отличных от DOS, таких как Linux, Windows и OS/2, обеспечивали различные реализации этих функций.
Члены-функции
int kbhit(void)Определяет, было ли нажатие клавиш клавиатуры
int ungetch(int c)Помещает символ c обратно в буфер клавиатуры.
int getch(void)Считывает символ напрямую из консоли без использования буфера и echo-вывода.
int getche(void)Считывает символ напрямую из консоли без использования буфера, но с использованием echo-вывода.
int putch(int c)Функция _putch выводит символ c в консоль без буферизации. В случае успеха возвращает c. В противном случае возвращает EOF.
char *_cgets(char *buffer)Считывает строку из консоли и хранит ее в массиве, указывающим на буфер. buffer[0], должен содержать максимальную длину (в символах) строки, то есть сколько символов нужно считать. Второй элемент массива buffer[1] указывает «где» . _cgets хранит текущую длину строки. _cgets считывает символы до символа возврата, перевода строки или указанного максимума числа символов.
int _cprintf(const char *format, arg0. argn)Форматирование и вывод («печать» ) строки напрямую в консоль.
int _cputs(const char *string)Вывод строки напрямую в консоль.
int _cscanf(char *format, arg0. argn)Считывание и форматирование данных напрямую из консоли.
сообщает системе, что именем программы является main() – главная функция , и что она возвращает целое число , о чем указывает аббревиатура "int". Имя main() – это специальное имя, которое указывает, где программа должна начать выполнение [1.1]. Наличие круглых скобок после слова main() свидетельствует о том, что это имя функции . Если содержимое круглых скобок отсутствует или в них содержится служебное слово void, то это означает, что в функцию main() не передается никаких аргументов. Тело функции main() ограничено парой фигурных скобок. Все утверждения программы, заключенные в фигурные скобки , будут относиться к функции main() .
В теле функции main() имеются еще три функции. Во-первых, функции printf() находятся в библиотеке компилятора языка С, и они печатают или отображают те аргументы, которые были подставлены вместо параметров. Символ "\n" составляет единый символ newline (новая строка), т.е. с помощью этого символа осуществляется перевод на новую строку. Символ "\t" осуществляет табуляцию, т.е. начало вывода результатов программы с отступом вправо.
Функция без параметров _getch() извлекает символ из потока ввода (т.е. ожидает нажатия почти любой клавиши). С другими компиляторами, возможно, потребуется getch() , т.е. без префиксного нижнего подчеркивания.
Последнее утверждение в первой программе
указывает на то, что выполнение функции main() закончено и что в систему возвращается значение 0 ( целое число ). Нуль используется в соответствии с соглашением об индикации успешного завершения программы [1.3].
В завершение следует отметить, что все действия в программе завершаются символом точки с запятой.
Все файлы проекта сохраняются в той папке, которая сформировалась после указания в поле Location имени проекта (hello). На рис. 1.19 показаны папки и файлы проекта Visual Studio 2010..
На рис. 1.19 файлы с полученными расширениями означают:
hello.sln – файл решения для созданной программы. Он содержит информацию о том, какие проекты входят в данное решение. Обычно, эти проекты расположены в отдельных подкаталогах. Например, наш проект находится в подкаталоге hello;
hello.suo – файл настроек среды Visual Studio при работе с решением, включает информацию об открытых окнах, их расположении и прочих пользовательских параметрах.
hello.sdf – файл содержащий вспомогательную информацию о проекте, который используется инструментами анализа кода Visual Studio , такими как IntelliSense для отображения подсказок об именах и т.д.
Файлы папки Debug показаны на рис. 1.20.
Рассмотрим файлы в соответствии с рис. 1.20.
hello.exe – исполняемый файл проекта;
hello.ilk – файл " incremental linker", используемый компоновщиком для ускорения процесса компоновки;
hello.pdb – отладочная информация / информация об именах в исполняемых файлах, используемая отладчиком.
Файлы папки hello показаны на рис. 1.21.
Характеристика содержимого папки hello:
main.c – файл исходного программного кода,
hello.vcxproj – файл проекта,
hello.vcxproj.filters – файл с описанием фильтров, используемых Visual Studio Solution Explorer для организации и отображения файлов с исходным кодом.
Практическая часть
В практической части выполните следующие задания на основе рассмотренной программы hello:
- Напишите программу, которая выводила бы на консоль название факультета, где учитесь, номер группы, свою фамилию, имя и отчество в разных строках дисплея (консоли) с помощью одной функции printf() .
- Вывод выполните с помощью нескольких функций printf() (количество функций должно соответствовать каждой порции информации).
- Для задания пункта 2 вывод информации выполните в различных строках подряд, т.е. без межстрочного пропуска.
- Проверьте программу без ключевого слова void для функции main() .
Примечание. Вывод требуемой информации осуществляется с помощью букв латинского алфавита. Комментарии в программе могут быть сделаны после символа "//" или внутри комбинации символов "/* */".
сообщает системе, что именем программы является main() – главная функция , и что она возвращает целое число , о чем указывает аббревиатура "int". Имя main() – это специальное имя, которое указывает, где программа должна начать выполнение [1.1]. Наличие круглых скобок после слова main() свидетельствует о том, что это имя функции . Если содержимое круглых скобок отсутствует или в них содержится служебное слово void, то это означает, что в функцию main() не передается никаких аргументов. Тело функции main() ограничено парой фигурных скобок. Все утверждения программы, заключенные в фигурные скобки , будут относиться к функции main() .
В теле функции main() имеются еще три функции. Во-первых, функции printf() находятся в библиотеке компилятора языка С, и они печатают или отображают те аргументы, которые были подставлены вместо параметров. Символ "\n" составляет единый символ newline (новая строка), т.е. с помощью этого символа осуществляется перевод на новую строку. Символ "\t" осуществляет табуляцию, т.е. начало вывода результатов программы с отступом вправо.
Функция без параметров _getch() извлекает символ из потока ввода (т.е. ожидает нажатия почти любой клавиши). С другими компиляторами, возможно, потребуется getch() , т.е. без префиксного нижнего подчеркивания.
Последнее утверждение в первой программе
указывает на то, что выполнение функции main() закончено и что в систему возвращается значение 0 ( целое число ). Нуль используется в соответствии с соглашением об индикации успешного завершения программы [1.3].
В завершение следует отметить, что все действия в программе завершаются символом точки с запятой.
Все файлы проекта сохраняются в той папке, которая сформировалась после указания в поле Location имени проекта (hello). На рис. 1.19 показаны папки и файлы проекта Visual Studio 2010..
На рис. 1.19 файлы с полученными расширениями означают:
hello.sln – файл решения для созданной программы. Он содержит информацию о том, какие проекты входят в данное решение. Обычно, эти проекты расположены в отдельных подкаталогах. Например, наш проект находится в подкаталоге hello;
hello.suo – файл настроек среды Visual Studio при работе с решением, включает информацию об открытых окнах, их расположении и прочих пользовательских параметрах.
hello.sdf – файл содержащий вспомогательную информацию о проекте, который используется инструментами анализа кода Visual Studio , такими как IntelliSense для отображения подсказок об именах и т.д.
Файлы папки Debug показаны на рис. 1.20.
Рассмотрим файлы в соответствии с рис. 1.20.
hello.exe – исполняемый файл проекта;
hello.ilk – файл " incremental linker", используемый компоновщиком для ускорения процесса компоновки;
hello.pdb – отладочная информация / информация об именах в исполняемых файлах, используемая отладчиком.
Файлы папки hello показаны на рис. 1.21.
Характеристика содержимого папки hello:
main.c – файл исходного программного кода,
hello.vcxproj – файл проекта,
hello.vcxproj.filters – файл с описанием фильтров, используемых Visual Studio Solution Explorer для организации и отображения файлов с исходным кодом.
Практическая часть
В практической части выполните следующие задания на основе рассмотренной программы hello:
- Напишите программу, которая выводила бы на консоль название факультета, где учитесь, номер группы, свою фамилию, имя и отчество в разных строках дисплея (консоли) с помощью одной функции printf() .
- Вывод выполните с помощью нескольких функций printf() (количество функций должно соответствовать каждой порции информации).
- Для задания пункта 2 вывод информации выполните в различных строках подряд, т.е. без межстрочного пропуска.
- Проверьте программу без ключевого слова void для функции main() .
Примечание. Вывод требуемой информации осуществляется с помощью букв латинского алфавита. Комментарии в программе могут быть сделаны после символа "//" или внутри комбинации символов "/* */".
Я часто вижу, как люди используют заголовочный файл conio.h в C и C ++, хотя я не вижу каких-либо существенных преимуществ в использовании функций внутри conio.h по сравнению со стандартными библиотечными функциями. Кроме того, conio.h имеет недостатки в зависимости от среды Windows / MS-DOS и не является частью стандарта C.
- В чем причина выбора функций conio.h ?
- Что обеспечивают функции внутри conio.h , чего не могут функции стандартных библиотек C?
- Зачем выбирать библиотеку conio ?
2 ответа
Заголовок conio.h специфичен для Turbo C, который предшествует раннему стандарту C на несколько лет. Он содержит подпрограммы, специфичные для командной строки DOS. Здесь часто используется одна функция getch , которая позволяет читать по одному символу за раз, не нажимая клавишу Enter. Он также содержит gotoxy , который позволяет поместить курсор в определенное место в терминале
Вообще говоря, способы взаимодействия с терминалом, подобные этому, очень специфичны для ОС, поэтому у каждого есть свой (обычно непереносимый) способ сделать это.
Это отличается от функций в stdio.h, которые содержат такие функции, как printf , scanf и getchar , которые работают независимо от того, какой тип консоли используется.
В чем причина выбора функций conio.h?
У нее есть функции, которые не предоставляются стандартной библиотекой, и люди, которые ее выбирают, не заботятся о переносе на другие системы.
Что обеспечивают функции внутри conio.h, чего не могут функции стандартных библиотек C?
Это некоторые функции, которые не имеют стандартной альтернативы. Там могут быть другие:
Стандартная библиотека потенциально может предоставлять функции. Но это не так.
Почему стоит выбрать библиотеку conio?
Потому что вас научили его использовать, и вы не заботитесь о портировании на другие системы.
Читайте также: