English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

不知道為何他就說我程式有問題即將關閉
小的是用visual c++ 要寫的
拜託高手幫幫忙阿
------------
#include
#include
#include
void delay(double secs)
{
clock_t end;
end = (int)(secs*CLOCKS_PER_SEC)+clock();
while( clock() < end )
;
}
static int portvalue=0;
void sound(unsigned freq)
{
int portdata;
_outp(0x43,0xb6);
freq=(unsigned)(1193180L/freq);
_outp(0x42,(char)freq);
_outp(0x42,(char)freq>>8);
portdata=_inp(0x61);
if(portvalue==0)
portvalue=portdata;
_outp(0x61,portvalue | 0x3);


}
void nosound(void)
{
_outp(0x61,portvalue);
}
int main (void)
{
int i;
unsigned freq[]={523,587,659,523,523,587,659,523,
659,698,784,0,659,698,784,0,
784,880,784,698,659,523,
784,880,784,698,659,523,
523,392,523,0,523,392,523,0};

double duration[]={0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
0.25,0.25,0.25,0.25,0.5,0.5,
0.25,0.25,0.25,0.25,0.5,0.5,
0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5};
for(i=0;i<36;i++)
{
if( freq[i] > 0)
{
sound(freq[i]);
}
delay(duration[i]);
}
nosound();
return 0;
}

2006-05-23 17:26:22 · 3 個解答 · 發問者 阿補 1 in 電腦與網際網路 程式設計

3 個解答

在Windows NT、Windows XP作業系統中,是以32位元保護模式下運作。
此時I/O是一種受作業系統控管保護的資源。
系統不允許直接進行I/O(ex. _outp(0x43,0xb6);)

解決方式:
1. 在Windows 95、Windows 98等作業系統下執行。
2. 需I/O的部份採用M$之DDK(Device Develope Kit)開發。(另一門大學問)

2006-05-24 05:44:02 · answer #1 · answered by Diamond Liu 7 · 0 0

因為過去的純DOS程式,在WinXP的 DOS 命令提示字元下,大多還是可執行的,一些的I/O(有些不行),它還是會透過driver幫你處理,看起來像是直接I/O一樣,像你的這個程式就屬於其中之一,如果用Visual C++ 編譯成Win32程式,又在XP下run當然就不行,但你若用早期DOS下C compiler來編譯,這種執行檔就會可以(XP下執行一樣可以喔).像是DOS下的Turbo或Borland C++,MSC之類都行.程式可能會一點點的小修改,比方_inp,_outp改成inp和outp.

2006-05-24 09:40:06 · answer #2 · answered by chan 5 · 0 0

因為在xp 下. 不能直接控制IO 所以當然您的程式會發生錯誤

2006-05-24 05:30:07 · answer #3 · answered by SiYu 5 · 0 0

fedest.com, questions and answers