作者 主題: 請問一下我這個音樂程式哪裡寫錯了  (閱讀 5949 次)

0 會員 與 1 訪客 正在閱讀本文。

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
#include<stdio.h>
 void main()
{
 char freg[]={0,262,294,330,349,392};
 int f;
 int l;
 int foffset=0;
 int loffset=0;
 int Escstatus=0;
 FILE *fp;
 fp=fopen("SONG.txt","r");
 while(Escstatus==0)
{
 if(feof(fp))rewind(fp);
 fscanf(fp,"%d %d",&f,&l);
 sound(freg[f+foffset]);
 checkkey();
 delay(500*l+100*loffset);
 }
 nosound();
 fclose(fp);
}
 void checkkey()
{
 int key;
 while(bioskey(1)==0)
{
 key=bioskey(0);
 switch(key)
 case Esc:
 Escstatus=1;
 break;
 case Up:
 foffset++;
 break;
 foffset--;
 break;
 case Down:
 loffset++;
 break;
 loffset--;
 break;
 case LEFT:
 case RIGHT:
 case Spase:
 loffset=0;
 foffset=0;
 break;
 defolat:
}
}
另一個 TXT檔
1_1_2_1_3_1_1_1_1_1_2_1_3_1_1_1_3_1_4_1_5_2

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
Re: 請問一下我這個音樂程式哪裡寫錯了
« 回覆 #1 於: 2005-12-06 22:26 »
引述: "libelu"
#include<stdio.h>


請問你是怎樣知道有錯誤?

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #2 於: 2005-12-06 22:41 »
我用C語言組譯程式結果有錯

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #3 於: 2005-12-06 22:55 »
引述: "libelu"
我用C語言組譯程式結果有錯


沒提供錯誤訊息,別人猜的到嗎?

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #4 於: 2005-12-07 00:30 »
我把程式改成這樣可是還是錯兩個我用組譯他說錯在case Esc:跟void checkkey()的地方請問我因該則麼改謝謝

#include<stdio.h>
 void main()
{
 char freg[]={0,262,294,330,349,392};
 int f;
 int l;
 int foffset=0;
 int loffset=0;
 int Escstatus=0;
 FILE*fp;
 fp=fopen("SONG.txt","r");
 while(Escstatus==0)
{
 if(feof(fp))rewind(fp);
 fscanf(fp,"%d %d",&f,&l);
 sound(freg[f+foffset]);
 checkkey();
 delay(500*l+100*loffset);
 }
 nosound();
 fclose(fp);
}
 void checkkey()
{
 int key;
 while(bioskey(1)==0)
{
 key=bioskey(0);
 switch(key)
{
 case Esc:
Escstatus=1;
nosound();

break;

defolat:break;
}
}
}

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #5 於: 2005-12-07 03:13 »
引述: "libelu"
我把程式改成這樣可是還是錯兩個我用組譯他說錯在case Esc:跟void checkkey()的地方請問我因該則麼改謝謝


程式碼檔案不是你寫的呼?為何會問這個問題呢?:)

還有你根本沒有引入 bios.h 檔案,這也很奇怪不是?而程式碼來看,就是沒有 Esc 這個數值定義... 所以請定義一下 Esc 數值。ex: define Esc 10,或者是 bios.h 檔案有定義?這你要自己看一下。

另外 bioskey() 是 bios 的 int 10h 的呼叫,我手上已經沒 turbo c 這類軟體,而且也很多年沒寫 turbo c 程式了... 你得自己查一下文件,確認一下 esc 按鍵傳回的 scan code 為何,或者是前面說到 bios.h 有定義就單純了。

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #6 於: 2005-12-07 13:05 »
我改好了可是他還是說抓不到 CHECKKEY
我用組一出現了3行錯誤Type mismatch in redeclaration of 'checkkey'跟Undefined symbol 'Esc'跟Undefined symbol 'Escstatus'
#include<stdio.h>
#include <bios.h>
#define ESC   0x11b
 void main()
{
 char freg[]={0,262,294,330,349,392};
 int f;
 int l;
 int foffset=0;
 int loffset=0;
 int Escstatus=0;
 FILE*fp;
 fp=fopen("SONG.txt","r");
 while(Escstatus==0)
{
 if(feof(fp))rewind(fp);
 fscanf(fp,"%d %d",&f,&l);
 sound(freg[f+foffset]);
 checkkey();
 delay(500*l+100*loffset);
 }
 nosound();
 fclose(fp);
}
 void checkkey()
{
 int key;
 while(bioskey(1)==0);
{
 key=bioskey(0);
 switch(key)
{
 case Esc:
Escstatus=1;
nosound();

break;

defolat:break;
}
}
}

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #7 於: 2005-12-07 13:13 »
我覺得.... 要不要再看看書呢?
如果沒學過, 看看是不是要去上課或旁聽學一下 C.
如果正在上課, 那去問你的老師或同學吧.

你的問題... 都是很基本的東西, 書如果不是只有看過, 而是看懂, 應該會知道那兒錯了. 上課也應該都會教到才對.

alan yueh

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #8 於: 2005-12-07 15:43 »
1.函式checkkey()應在最前面宣告即
  void checkkey();
2.#define ESC 0x1b 應改為
   #define Esc 0x1b 大小寫不同
3.另偷懶則將main(){ ..... }
   放在最後則checkkey()可不宣告

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #9 於: 2005-12-07 17:13 »
我改好了可是為什麼他還是說我Escstatus=1;錯誤我把這一行刪除結果可以RUN可是都沒有聲音還有按ESC都不會跳出是我檔案TXT格式寫錯嗎還是延遲太久
#include<stdio.h>
#include <bios.h>
#include<dos.h>
#define Esc   0x11b

void checkkey()
{
int key;
while(bioskey(1)==0);
{
key=bioskey(0);
switch(key)
{
case Esc:
Escstatus=1;
nosound();
break;




defolat:break;
}
}
}

  void main()
{
char freg[]={0,262,294,330,349,392};
int f;
int l;
int foffset=0;
int loffset=0;
int Escstatus=0;
FILE *fp;
fp=fopen("SONG.txt","r");
while(Escstatus==0)
{
if(feof(fp))rewind(fp);
fscanf(fp,"%d %d",&f,&l);
sound(freg[f+foffset]);
checkkey();
delay(500*l+100*loffset);
}
nosound();
fclose(fp);
}
另一個TXT檔
1_1_2_1_3_1_1_1_1_1_2_1_3_1_1_1_3_1_4_1_5_2

alan yueh

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #10 於: 2005-12-08 09:27 »
你將Escstatus宣告在main內,當然checkkey抓不到
請將int Escstatus=0;
放在#define Esc 0x011b之下一行
我已沒有turboC之環境只能用看的

libelu

  • 可愛的小學生
  • *
  • 文章數: 11
    • 檢視個人資料
請問一下我這個音樂程式哪裡寫錯了
« 回覆 #11 於: 2005-12-08 12:14 »
我改好了可是為什麼都沒有聲音可以幫我看看嗎?
#include<stdio.h>
#include <bios.h>
#include<dos.h>
#define Esc 0x11b
#define Up 0x48
#define Down 0x50
#define right 0x4d
#define left 0x4b
#define space 0xe
int Escstatus=0;
int foffset=0;
int loffset=0;
void checkkey()
{
int key;
while(bioskey(1)==0);
{
key=bioskey(0);
switch(key)
{
case Esc:
Escstatus=1;  
break;
case Up:
 foffset++;
 break;
case left:
 foffset--;
 break;
case right:
 loffset++;
 break;
case Down:
 loffset--;
 break;
case space:
loffset=0;
 foffset=0;
 break;
default : break;
}
}
}  
void main()
{
char freg[]={0,262,294,330,349,392};
int f;
int l;

 
FILE *fp;
fp=fopen("SONG.txt","r");
while(Escstatus==0)
{
if(feof(fp))rewind(fp);
fscanf(fp,"%d %d",&f,&l);
sound(freg[f+foffset]);
checkkey();
delay(500*l+100*loffset);
}
nosound();
fclose(fp);
}
SONG.txt檔案
1 1 2 1 3 1 1 1 1 1 2 1 3 1 1 1 3 1 4 1 5 2