#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
是在网上搜的,不过只是为了说明问题而已,哪儿来的不重要吧
#9
TC的东东现在都没人用了,楼主别玩这古董了吧。
#10
那请问要在VS里面使用画图函数怎么办?
#11
我也不想玩过时的TC,只是在VS上运行有许多不懂的地方,现在的课本基本上都只征对TC而言的,你能帮我推荐点学习VS平台上的C语言的资料吗?
#12
就是啊,在VS里面想要处理图像怎么办呢?
#13
GDI+
#14
很简单,库里没有这个函数
#15
我试过了,编译结果是这样的:
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
是在网上搜的,不过只是为了说明问题而已,哪儿来的不重要吧
#9
TC的东东现在都没人用了,楼主别玩这古董了吧。
#10
那请问要在VS里面使用画图函数怎么办?
#11
我也不想玩过时的TC,只是在VS上运行有许多不懂的地方,现在的课本基本上都只征对TC而言的,你能帮我推荐点学习VS平台上的C语言的资料吗?
#12
就是啊,在VS里面想要处理图像怎么办呢?
#13
GDI+
#14
很简单,库里没有这个函数
#15
我试过了,编译结果是这样的:
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).