请问Visual Studio中为什么不能使用graphics.h?

时间:2023-02-03 17:34:42
我在Visual Studio 2008中运行如下函数:
#include <stdio.h> 
#include <dos.h> 
#include <graphics.h> 
#include <fcntl.h> 
#include <time.h> 
void interrupt(* handler)( ); 
int handle,control; 
enum NOTES 

    C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247, 
    C0=262, D0=296, E0=330, F0=349, G0=392, A0=440, B0=494, 
    C1=523, D1=587, E1=659, F1=698, G1=784, A1=880, B1=988, 
    C2=1047, D2=1175, E2=1319, F2=1397, G2=1568, A2=1760, B2=1796 
}song[]={ 
    E1,16,E1,8,E1,8,F1,16,G1,16,F1,16,F1,16,E1,16,D1, 
  16,C1,16,C1,16,D1,16,E1,16,E1,16,D1,16,D1,16,E1,16, 
  E1,8,E1,8,F1,16,G1,16,G1,16,F1,16,E1,16,D1,16,C1, 
  16,C1,16,D1,16,E1,16,D1,16,D1,16,C1,16,D1,16,D1,8, 
  D1,8,E1,16,C1,16,D1,16,E1,8,F1,8,E1,16,C1,16,D1, 
  16,E1,8,F1,8,E1,16,C1,16,C1,16,D1,16,G0,16,E1,16, 
  E1,16,E1,8,F1,16,G1,16,G1,16,F1,16,E1,16,D1,16,C1, 
  16,C1,16,D1,16,E1,16,E1,16,D1,16,C1,16,D1,16, 
  0,0}; 
void interrupt music() 

    static int flag=0,note=0,fre,dur=8; 
    flag++; 
    fre=song[note]; 
    dur=song[note+1]; 
    if(fre) 
    { 
        flag=0; 
        /*打开计数器*/ 
        outportb(0x43,0xb6); 
        /*计算频率*/ 
        fre=(unsigned)(1193180L/fre); 
        /*将频率写入计时器*/ 
        outportb(0x42,(char)fre); 
        outportb(0x42,(char)(fre>>8)); 
        /*从扬声器端口读出控制信息*/ 
        control=inportb(0x61); 
        /*写入扬声器,使之发声*/ 
        outportb(0x61,(control)|0x3); 
        note=note+2; 
        if(note>=134)note=0; 
    } 

void main() 

    int gdriver=DETECT,gmode,i,j; 
    initgraph (&gdriver,&gmode,"e:\\tc"); 
    while(!kbhit()) 
    { 
    /*获取0x1c中断向量*/ 
    handler=getvect(0x1c); 
    /*将music函数写入到0x1c中断向量中去*/ 
    setvect(0x1c,music); 
    /*清除屏幕*/ 
    cleardevice( ); 
    /*将背景色设置成黑色*/ 
    setbkcolor(BLACK); 
    for(i=0;i <300;i++) 
    { 
        j=i%30; 
        /*前景色设置*/ 
        setcolor(j/2); 
        /*画圆*/ 
        circle(320,240,(j+1)*5); 
        if(j==0)cleardevice( ); 
        delay(100); 
    } 
    } 
    /*关闭PC扬声器*/ 
    outportb(0x61,control&0xfe); 
    /*将0x1c中断向量置成系统原有的处理例程*/ 
    setvect(0x1c,handler); 
    getch(); 
    cleardevice(); 
    closegraph(); 



结果在编译的时候说无法打开包括文件:“graphics.h”,我在include文件夹里面也没有找到这个头文件,请问要运行这个头文件里面的函数该怎么办?

16 个解决方案

#1


graphics.h是TC的东东,VS没有这个。

#2


因为那个是Turbo C的东西,dos时代的产物。过时了。

#3


VC里面没有那个头文件的

#4


vc中有处理图形的头文件吗?

#5


两个软件的问题

#6


看来你这个代码是在晚上搜的!

#7


把 graphics.h 换成 stdlib.h 试试. 

#8


引用 5 楼 jackie4321 的回复:
两个软件的问题
是在网上搜的,不过只是为了说明问题而已,哪儿来的不重要吧

#9


TC的东东现在都没人用了,楼主别玩这古董了吧。

#10


引用 2 楼 wuyu637 的回复:
因为那个是Turbo C的东西,dos时代的产物。过时了。

那请问要在VS里面使用画图函数怎么办?

#11


引用 9 楼 hairetz 的回复:
TC的东东现在都没人用了,楼主别玩这古董了吧。

我也不想玩过时的TC,只是在VS上运行有许多不懂的地方,现在的课本基本上都只征对TC而言的,你能帮我推荐点学习VS平台上的C语言的资料吗?

#12


引用 4 楼 bxl1989 的回复:
vc中有处理图形的头文件吗?

就是啊,在VS里面想要处理图像怎么办呢?

#13


引用 12 楼 muxurou2009 的回复:
引用 4 楼 bxl1989 的回复:
 vc中有处理图形的头文件吗?

 就是啊,在VS里面想要处理图像怎么办呢?


GDI+

#14


很简单,库里没有这个函数

#15


引用 7 楼 dcmorgan 的回复:
把 graphics.h 换成 stdlib.h 试试.

我试过了,编译结果是这样的:
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2143: 语法错误 : 缺少“)”(在“*”的前面)
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2143: 语法错误 : 缺少“{”(在“*”的前面)
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2059: 语法错误 : “)”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2061: 语法错误 : 标识符“music”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2059: 语法错误 : “;”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2059: 语法错误 : “)”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(50) : error C2065: “DETECT”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(51) : warning C4013: “initgraph”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(52) : warning C4013: “kbhit”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4013: “getvect”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4047: “=”: “int *(__cdecl *)()”与“int”的间接级别不同
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : error C2106: “=”: 左操作数必须为左值
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4550: 表达式计算为缺少参数列表的函数
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(57) : warning C4013: “setvect”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(57) : error C2065: “music”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(59) : warning C4013: “cleardevice”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(61) : warning C4013: “setbkcolor”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(61) : error C2065: “BLACK”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(66) : warning C4013: “setcolor”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(68) : warning C4013: “circle”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(70) : warning C4013: “delay”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(74) : warning C4013: “outportb”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(77) : warning C4013: “getch”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(79) : warning C4013: “closegraph”未定义;假设外部返回 int

#16


原因很简单,你要使用的是TC提供的DOS环境下的图形库,而VS下没有这个库,虽然加入了“graphics.h”,也只能使编译通过,但链接是通不过的。要使链接通过,必需要把TC的图形库也加进VS的工程去链接,有可能叫"graphics.lib",而且VS里面的工程类型应该是控制台应用程序(console application).

#1


graphics.h是TC的东东,VS没有这个。

#2


因为那个是Turbo C的东西,dos时代的产物。过时了。

#3


VC里面没有那个头文件的

#4


vc中有处理图形的头文件吗?

#5


两个软件的问题

#6


看来你这个代码是在晚上搜的!

#7


把 graphics.h 换成 stdlib.h 试试. 

#8


引用 5 楼 jackie4321 的回复:
两个软件的问题
是在网上搜的,不过只是为了说明问题而已,哪儿来的不重要吧

#9


TC的东东现在都没人用了,楼主别玩这古董了吧。

#10


引用 2 楼 wuyu637 的回复:
因为那个是Turbo C的东西,dos时代的产物。过时了。

那请问要在VS里面使用画图函数怎么办?

#11


引用 9 楼 hairetz 的回复:
TC的东东现在都没人用了,楼主别玩这古董了吧。

我也不想玩过时的TC,只是在VS上运行有许多不懂的地方,现在的课本基本上都只征对TC而言的,你能帮我推荐点学习VS平台上的C语言的资料吗?

#12


引用 4 楼 bxl1989 的回复:
vc中有处理图形的头文件吗?

就是啊,在VS里面想要处理图像怎么办呢?

#13


引用 12 楼 muxurou2009 的回复:
引用 4 楼 bxl1989 的回复:
 vc中有处理图形的头文件吗?

 就是啊,在VS里面想要处理图像怎么办呢?


GDI+

#14


很简单,库里没有这个函数

#15


引用 7 楼 dcmorgan 的回复:
把 graphics.h 换成 stdlib.h 试试.

我试过了,编译结果是这样的:
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2143: 语法错误 : 缺少“)”(在“*”的前面)
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2143: 语法错误 : 缺少“{”(在“*”的前面)
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(6) : error C2059: 语法错误 : “)”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2061: 语法错误 : 标识符“music”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2059: 语法错误 : “;”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(24) : error C2059: 语法错误 : “)”
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(50) : error C2065: “DETECT”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(51) : warning C4013: “initgraph”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(52) : warning C4013: “kbhit”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4013: “getvect”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4047: “=”: “int *(__cdecl *)()”与“int”的间接级别不同
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : error C2106: “=”: 左操作数必须为左值
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(55) : warning C4550: 表达式计算为缺少参数列表的函数
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(57) : warning C4013: “setvect”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(57) : error C2065: “music”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(59) : warning C4013: “cleardevice”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(61) : warning C4013: “setbkcolor”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(61) : error C2065: “BLACK”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(66) : warning C4013: “setcolor”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(68) : warning C4013: “circle”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(70) : warning C4013: “delay”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(74) : warning C4013: “outportb”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(77) : warning C4013: “getch”未定义;假设外部返回 int
1>d:\my documents\visual studio 2008\projects\09072801\09072801\1.c(79) : warning C4013: “closegraph”未定义;假设外部返回 int

#16


原因很简单,你要使用的是TC提供的DOS环境下的图形库,而VS下没有这个库,虽然加入了“graphics.h”,也只能使编译通过,但链接是通不过的。要使链接通过,必需要把TC的图形库也加进VS的工程去链接,有可能叫"graphics.lib",而且VS里面的工程类型应该是控制台应用程序(console application).