C语言高手进!!

时间:2022-01-13 18:52:50
一是问一个函数 就是C语言有没有提取按键盘的时间的函数,我想把DELAY(按住键盘的时间)当然要到毫秒!!!
二是 想大家帮我看看程序是和图形学有关系的!!
问题出在,REPLAY()函数不执行啊!!还有就是我按“Q”退出 但是好象没有什么作用啊!!!
 其中 FRE是频率函数!!这个程序的目的是为了 用图形学画个钢琴的键盘然后通过键盘输入1-8然后对应声音,把输入的值保存到文件,然后在调用REPLYA函数自动播放一次文件!!
可以编译通过!!有兴趣大家试一下!   

#include <dos.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
float fre(int k)
{  float step,note[10];
  int a;
  step=pow(2,1/12.);
   note[0]=385*step*step*step;
   note[1]=note[0]*step*step;
   note[2]=note[1]*step*step;
   note[3]=note[2]*step;
  note[4]=note[3]*step*step;
  note[5]=note[4]*step*step;
  note[6]=note[5]*step*step;
  note[7]=note[6]*step;
a=k-1;
return(note[a]);
}

void fill(int j)
{   int a;
a=j;
setfillstyle(1,a + 1);
bar(80+(a-1)*60,200,80 + a*60,375);
}

void replay()
{
 char c1;
 FILE *fp1;
  fp1=fopen("e:\\tc\\tc\\music.dat","rb");

   if(fp1==NULL)
   {
  printf("Open file error!\n");
  exit(0);
   }
   else
   {

 while(!feof(fp1))
 {
c1=fgetc(fp1);
switch(c1){
case('1'):
sound(fre(1));
delay(100);
fill(1);
delay(100);
break;
case('2'):
sound(fre(2));
delay(100);
fill(2);
delay(100);
break;
case('3'):
sound(fre(3));
delay(100);
fill(3);
delay(100);
break;
case('4'):
sound(fre(4));
delay(100);
fill(4);
delay(100);
break;
case('5'):
sound(fre(5));
delay(100);
fill(5);
delay(100);
break;
case('6'):
sound(fre(6));
delay(100);
fill(6);
delay(100);
break;
case('7'):
sound(fre(7));
delay(100);
fill(7);
delay(100);
break;
   case('8'):
sound(fre(8));
delay(100);
fill(8);
delay(100);
break;
}
  }
 }
}

 void main()
{
   float step;
   int i;
   int gd=DETECT,gm;
   char c;
   FILE *fp;
 initgraph(&gd,&gm,"e:\\tc\\tc\\bgi");
   cleardevice();
  fp=fopen("e:\\tc\\tc\\bin\\music.dat","wb");
 if(fp==NULL)
 {
printf("File open error!");

exit(0);
 }


  setcolor(BLUE);
  settextstyle(DEFAULT_FONT,HORIZ_DIR  ,1);
  outtextxy(100,150,"1-DO");
  outtextxy(160,150,"2-RE");
  outtextxy(220,150,"3-MI");
  outtextxy(280,150,"4-FA");
  outtextxy(340,150,"5-SO");
  outtextxy(400,150,"6-LA");
  outtextxy(460,150,"7-SE");
 outtextxy(520,150,"8-DO+");
 setcolor(RED);
 settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
 outtextxy(100,90,"Quit");
 outtextxy(480,90,"Replay");
  outtextxy(290,90,"Stop");
  setcolor(11);
   setlinestyle(0,0,1);
   for(i=80;i<=530;i+=60)
   {
  rectangle(i,200,i+60,375);
}

 while(c=getch(),c!='q'&&c!='Q')
 {

switch(c)
   {
case('s'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;
   case('S'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;

case('1'):
sound(fre(1));
fill(1);
fputc(c,fp);

 break;
case('2'):
sound(fre(2));
fill(2);
fputc(c,fp);

 break;

case('3'):
sound(fre(3));
fill(3);
fputc(c,fp);

 break;
case('4'):
sound(fre(4));
fill(4);
fputc(c,fp);

 break;
case('5'):
sound(fre(5));
fill(5);
fputc(c,fp);

 break;
case('6'):
sound(fre(6));
fill(6);

 break;
case('7'):
sound(fre(7));
fill(7);
fputc(c,fp);

 break;
 case('8'):
sound(fre(8));
fill(8);
fputc(c,fp);

 break;


case('r'):
replay();
break;
case('R'):
replay();
break;


}
}
nosound();

18 个解决方案

#1


少定义了一个K 在MAIN里面定义一个K

#2


今天仔细一看发现好多错误!!!大家还是尽可能改吧  最近要考试都没有时间好好看!!
大家帮个忙吧!!谢谢

#3


好长的程序呀,偶看的头都晕了!!

#4


同意楼上,我看你还是先看看这方面的书自己先改改吧。。

#5


晕死了,太长了
怎么说也要混点分先!

#6


要按键速度快可以直接用中断写的键盘处理函数,具体的请参加dos游戏编程21条,www.vcok.com的高级编程板块精华帖里有这文章。要更好处理延时1是修改时钟计数器的中断,2是用clock函数自己判断。

#7


可能是我没有注解吧  上面的程序都很简单的啊!可能是大家看见比较长吧 都是几个CASE占了地方!!

#8


while(c=getch(),c!='q'&&c!='Q')
===================================
c=getch();
while( !(c=='q'||c='Q') )

#9


其它问题没法帮你调试,因为我电脑上没法运行图形模式

可以用Debug 下的单步跟踪F7,F8进行跟踪调试,应该可以找出问题所在,

#10



请问有谁知道编译原理和C++视频教程哪里有的下载的?
谢谢告知!!

#11


先给分!后说话!

                    穷人的愿望!!!!

#12


我改了一下,在Tc3.0下面可以了……  可以响应 r 和 R 两个键啊!!!
#include <dos.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>

float fre(int k)

  float step,note[10];
  int a;
  step=pow(2,1/12.);
  note[0]=385*step*step*step;
  note[1]=note[0]*step*step;
  note[2]=note[1]*step*step;
  note[3]=note[2]*step;
  note[4]=note[3]*step*step;
  note[5]=note[4]*step*step;
  note[6]=note[5]*step*step;
  note[7]=note[6]*step;
  a=k-1;
  return(note[a]);
}

void fill(int j)
{       int a;
a=j;
setfillstyle(1,a + 1);
bar(80+(a-1)*60,200,80 + a*60,375);
}

void replay()
{
   char c1;
   FILE *fp1;
   fp1=fopen("f:\\play\\music.dat","rb");

   if(fp1==NULL)
   {
  printf("Open file error!\n");
  exit(0);
   }
   else
   {

 while(!feof(fp1))
 {
c1=fgetc(fp1);
switch(c1)
{
case('1'):
sound(fre(1));
delay(100);
fill(1);
delay(100);
break;
case('2'):
sound(fre(2));
delay(100);
fill(2);
delay(100);
break;
case('3'):
sound(fre(3));
delay(100);
fill(3);
delay(100);
break;
case('4'):
sound(fre(4));
delay(100);
fill(4);
delay(100);
break;
case('5'):
sound(fre(5));
delay(100);
fill(5);
delay(100);
break;
case('6'):
sound(fre(6));
delay(100);
fill(6);
delay(100);
break;
case('7'):
sound(fre(7));
delay(100);
fill(7);
delay(100);
break;
case('8'):
sound(fre(8));
delay(100);
fill(8);
delay(100);
break;
}
  }
 }
}

 void main()
{
   //float step;
   int i,k;
   int gd=DETECT,gm;
   char c;
   FILE *fp;
   initgraph(&gd,&gm,"");
   cleardevice();
   fp=fopen("F:\\play\\music.dat","wb");
 if(fp==NULL)
 {
printf("File open error!");

exit(0);
 }


  setcolor(BLUE);
  settextstyle(DEFAULT_FONT,HORIZ_DIR  ,1);
  outtextxy(100,150,"1-DO");
  outtextxy(160,150,"2-RE");
  outtextxy(220,150,"3-MI");
  outtextxy(280,150,"4-FA");
  outtextxy(340,150,"5-SO");
  outtextxy(400,150,"6-LA");
  outtextxy(460,150,"7-SE");
  outtextxy(520,150,"8-DO+");
  setcolor(RED);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
  outtextxy(100,90,"Quit");
  outtextxy(480,90,"Replay");
  outtextxy(290,90,"Stop");
  setcolor(11);
  setlinestyle(0,0,1);
   for(i=80;i<=530;i+=60)
   {
  rectangle(i,200,i+60,375);
   }
 c =  getch();
 while( !(c=='q'||c=='Q') )
 {

  switch(c)
   {
case('s'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;
case('S'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;

case('1'):
sound(fre(1));
fill(1);
fputc(c,fp);
 break;
case('2'):
sound(fre(2));
fill(2);
fputc(c,fp);
break;

case('3'):
sound(fre(3));
fill(3);
fputc(c,fp);
break;
case('4'):
sound(fre(4));
fill(4);
fputc(c,fp);
break;
case('5'):
sound(fre(5));
fill(5);
fputc(c,fp);
break;
case('6'):
sound(fre(6));
fill(6);
break;
case('7'):
sound(fre(7));
fill(7);
fputc(c,fp);
break;
 case('8'):
sound(fre(8));
fill(8);
fputc(c,fp);
break;
case('r'):
replay();
break;
case('R'):
replay();
break;


}
c = getch();
}
        nosound();
}

#13


fp=fopen("F:\\play\\music.dat","wb");

这个文件路径是我机器上的,你自己路径自己去设置吧…………

#14


getch以后sleep一下不就延时了?

#15


可以响应 r 和 R 两个键, 但得先按 s 和 S 键……

#16


是asc转化么?
要一个:
qingyuan18@126.com

#17


while(c=getch(),c!='q'&&c!='Q')
===================================
c=getch();
while( !(c=='q'||c='Q') )
看看是不是这个问题。我没有tc,不能帮你调试。

#18


十万火急!!!!!!!!!!!!!1
我是个新手!
请问如何用C语言编写一个 记事本 ?

#1


少定义了一个K 在MAIN里面定义一个K

#2


今天仔细一看发现好多错误!!!大家还是尽可能改吧  最近要考试都没有时间好好看!!
大家帮个忙吧!!谢谢

#3


好长的程序呀,偶看的头都晕了!!

#4


同意楼上,我看你还是先看看这方面的书自己先改改吧。。

#5


晕死了,太长了
怎么说也要混点分先!

#6


要按键速度快可以直接用中断写的键盘处理函数,具体的请参加dos游戏编程21条,www.vcok.com的高级编程板块精华帖里有这文章。要更好处理延时1是修改时钟计数器的中断,2是用clock函数自己判断。

#7


可能是我没有注解吧  上面的程序都很简单的啊!可能是大家看见比较长吧 都是几个CASE占了地方!!

#8


while(c=getch(),c!='q'&&c!='Q')
===================================
c=getch();
while( !(c=='q'||c='Q') )

#9


其它问题没法帮你调试,因为我电脑上没法运行图形模式

可以用Debug 下的单步跟踪F7,F8进行跟踪调试,应该可以找出问题所在,

#10



请问有谁知道编译原理和C++视频教程哪里有的下载的?
谢谢告知!!

#11


先给分!后说话!

                    穷人的愿望!!!!

#12


我改了一下,在Tc3.0下面可以了……  可以响应 r 和 R 两个键啊!!!
#include <dos.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>

float fre(int k)

  float step,note[10];
  int a;
  step=pow(2,1/12.);
  note[0]=385*step*step*step;
  note[1]=note[0]*step*step;
  note[2]=note[1]*step*step;
  note[3]=note[2]*step;
  note[4]=note[3]*step*step;
  note[5]=note[4]*step*step;
  note[6]=note[5]*step*step;
  note[7]=note[6]*step;
  a=k-1;
  return(note[a]);
}

void fill(int j)
{       int a;
a=j;
setfillstyle(1,a + 1);
bar(80+(a-1)*60,200,80 + a*60,375);
}

void replay()
{
   char c1;
   FILE *fp1;
   fp1=fopen("f:\\play\\music.dat","rb");

   if(fp1==NULL)
   {
  printf("Open file error!\n");
  exit(0);
   }
   else
   {

 while(!feof(fp1))
 {
c1=fgetc(fp1);
switch(c1)
{
case('1'):
sound(fre(1));
delay(100);
fill(1);
delay(100);
break;
case('2'):
sound(fre(2));
delay(100);
fill(2);
delay(100);
break;
case('3'):
sound(fre(3));
delay(100);
fill(3);
delay(100);
break;
case('4'):
sound(fre(4));
delay(100);
fill(4);
delay(100);
break;
case('5'):
sound(fre(5));
delay(100);
fill(5);
delay(100);
break;
case('6'):
sound(fre(6));
delay(100);
fill(6);
delay(100);
break;
case('7'):
sound(fre(7));
delay(100);
fill(7);
delay(100);
break;
case('8'):
sound(fre(8));
delay(100);
fill(8);
delay(100);
break;
}
  }
 }
}

 void main()
{
   //float step;
   int i,k;
   int gd=DETECT,gm;
   char c;
   FILE *fp;
   initgraph(&gd,&gm,"");
   cleardevice();
   fp=fopen("F:\\play\\music.dat","wb");
 if(fp==NULL)
 {
printf("File open error!");

exit(0);
 }


  setcolor(BLUE);
  settextstyle(DEFAULT_FONT,HORIZ_DIR  ,1);
  outtextxy(100,150,"1-DO");
  outtextxy(160,150,"2-RE");
  outtextxy(220,150,"3-MI");
  outtextxy(280,150,"4-FA");
  outtextxy(340,150,"5-SO");
  outtextxy(400,150,"6-LA");
  outtextxy(460,150,"7-SE");
  outtextxy(520,150,"8-DO+");
  setcolor(RED);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
  outtextxy(100,90,"Quit");
  outtextxy(480,90,"Replay");
  outtextxy(290,90,"Stop");
  setcolor(11);
  setlinestyle(0,0,1);
   for(i=80;i<=530;i+=60)
   {
  rectangle(i,200,i+60,375);
   }
 c =  getch();
 while( !(c=='q'||c=='Q') )
 {

  switch(c)
   {
case('s'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;
case('S'):
nosound();

k=fclose(fp);
if(k!=0)
{
  printf("File close error!\n");
  exit(1);
}
break;

case('1'):
sound(fre(1));
fill(1);
fputc(c,fp);
 break;
case('2'):
sound(fre(2));
fill(2);
fputc(c,fp);
break;

case('3'):
sound(fre(3));
fill(3);
fputc(c,fp);
break;
case('4'):
sound(fre(4));
fill(4);
fputc(c,fp);
break;
case('5'):
sound(fre(5));
fill(5);
fputc(c,fp);
break;
case('6'):
sound(fre(6));
fill(6);
break;
case('7'):
sound(fre(7));
fill(7);
fputc(c,fp);
break;
 case('8'):
sound(fre(8));
fill(8);
fputc(c,fp);
break;
case('r'):
replay();
break;
case('R'):
replay();
break;


}
c = getch();
}
        nosound();
}

#13


fp=fopen("F:\\play\\music.dat","wb");

这个文件路径是我机器上的,你自己路径自己去设置吧…………

#14


getch以后sleep一下不就延时了?

#15


可以响应 r 和 R 两个键, 但得先按 s 和 S 键……

#16


是asc转化么?
要一个:
qingyuan18@126.com

#17


while(c=getch(),c!='q'&&c!='Q')
===================================
c=getch();
while( !(c=='q'||c='Q') )
看看是不是这个问题。我没有tc,不能帮你调试。

#18


十万火急!!!!!!!!!!!!!1
我是个新手!
请问如何用C语言编写一个 记事本 ?