2012-03-05 59 views
0
#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; 
} 

當我運行這個程序,我發現了以下錯誤:C處理器錯誤

conio.h: No such file or directory

如果刪除#include "conio.h"然後我發現了以下錯誤:

Undefined symbols for architecture x86_64:
"_kbhit", referenced from:
_main in cckd1NC4.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

哪有我解決了這個問題?這些背後的原因是什麼?你能告訴我嗎?

+1

什麼是您的目標平臺? – dasblinkenlight 2012-03-05 14:59:09

+2

爲什麼包含''conio.h''而不是''? 'stdio.h'和'stdlib.h'同上。 – 2012-03-05 15:00:24

+0

使用'#include「conio.h」'而不是'#include '意味着你提供的是頭文件而不是你的編譯器庫的一部分。你提供的頭文件? – 2012-03-05 15:01:22

回答

2

in C#include <lib.h>與#include「lib.h」不同。第一次搜索系統中的頭文件包含路徑,第二次搜索文件包含路徑

3

#include "something.h"中的雙引號表示文件something.h存在於當前目錄中,即源文件所在的位置。 #include <something.h>中的<>符號意味着something.h存在於標準庫文件夾中,即例如/usr/include文件夾中。 conio.h是standarad庫的一部分,因此您需要使用<>符號而不是雙引號。 您看到的錯誤是因爲鏈接程序無法找到kbhit()的函數定義來鏈接您的代碼以創建二進制/可執行文件。

+0

#include #include #include 我已經使用過這個但不行。我沒有提供任何頭文件。但我不工作。我正在運行在Mac OS X. – Kabir 2012-03-05 15:14:40

+0

你應該檢查你的環境(C_INCLUDE路徑)或你的-I參數到編譯器 – 2012-03-05 15:16:58

+0

你如何編譯?...你使用哪個編譯器?你可以粘貼你用於編譯的命令......正如彼得所說,你可以在gcc中使用-I參數來指定包含路徑 – snibu 2012-03-05 15:21:05

3

conio.h是一箇舊的DOS頭,幾乎從未使用過。 curses.h現在具有相同的功能。確保詛咒(或ncurses的)安裝在您的計算機上,並嘗試

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

對於它的價值,RANGE與太少parenthases定義;

#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))) 

而且,請在Macro Pitfalls上閱讀。