Ошибка процессора C для conio.h

#include "stdio.h"
#include "conio.h" 
#include "stdlib.h"

#define RANGE(i, min, max) (i<min) || (i>max) ? 1: 0

int main (void )
{
    int r;
    do
    {
        do{
            r=rand();
        } while (RANGE(r, 1, 100));
        printf("%d", r);
    }
    while (!kbhit());
    return 0;
}

Когда я запускаю эту программу, я нахожу следующую ошибку:

conio.h: нет такого файла или каталога

Если удалить #include "conio.h" тогда я нахожу следующую ошибку:

Неопределенные символы для архитектуры x86_64:
"_kbhit", ссылка на которую:
_main в cckd1NC4.o
ld: символы не найдены для архитектуры x86_64
collect2: ld вернул 1 статус выхода

Как я могу решить эту проблему? Каковы причины этого? Не могли бы вы сказать мне?

3 ответа

Решение

В C # включите <lib.h> отличается от #include "lib.h". Первый поиск файлов заголовков в системах включает путь, а второй в файлах включает путь

conio.h старый DOS-заголовок, почти никогда не используемый. Такая же функциональность теперь в curses.h, Убедитесь, что curses (или ncurses) установлены на вашем компьютере, и попробуйте

#include <stdio.h> 
#include <stdlib.h>   
#include <curses.h> 

Для чего это стоит, RANGE определяется слишком мало скобок;

#define RANGE(i, min, max) (i<min) || (i>max) ? 1: 0

Были бы проблемы с чем-то вроде

 if(!RANGE(i, 100 200))

Который станет (добавлены паренсы для ясности)

(!(i<100)) || (i>200)

Что не то, что вы хотите. Определите это как

#define RANGE(i, min, max) (((i)<(min)) || ((i)>(max)))

И, прочитайте на Макро Подводные камни.

Двойные кавычки в #include "something.h" означает файл something.h присутствует в текущем каталоге, т.е. где находится исходный файл. Где в качестве символов <> #include <something.h> означает, что что-то.h присутствует в папке библиотеки Standarad, например, /usr/include папка. conio.h является частью стандартной библиотеки, поэтому вам нужно использовать символы <> вместо двойных кавычек. Вы видите ошибку, потому что компоновщик не может найти определение функции kbhit() связать с вашим кодом, чтобы сделать двоичный файл / исполняемым.

Другие вопросы по тегам