gpt4 book ai didi

c - Beep 命令正在破坏我的功能

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:57 29 4
gpt4 key购买 nike

我整天都在摆弄这段代码,但我又被卡住了……提前致谢

基本上这个程序给我带来了问题,下面是我认为导致问题的代码片段。基本上,用户可以改变他们的“当前温度”,如果它超过上限或下限的阈值,则会调用“compareLimit”功能......然后该功能会调用各种其他功能(例如发出哔哔声,并允许一行传感器记录打印在屏幕上)。然而,以下是我的问题(请记住我必须使用哔哔声,但如果您有更好的方法请告知):

  • 哔哔声很烦人,我的整个“警报”模式都围绕着哔哔声的持续时间。这意味着每次我想按字母“O”来打印报告时,它都会随心所欲地打印出来,同时发出哔哔声。我该如何消除它?

  • 我想让用户即使在闹钟模式的“while 循环”中仍然能够访问最后的代码块(case 语句),以便他们实际上可以通过以下方式退出闹钟模式按 r 或 f 改变温度,并使系统恢复正常。

    void updateDisplay()
    {
    clrscr();
    HANDLE hConsole; //standard c library call
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //used for output screen buffer to allow for coloured text

    SetConsoleTextAttribute(hConsole, 2); //sets output screen colour for following text
    printf("\nCurrent Temperature for channel 1 is %d\n\n", temperatureSensor1Reading);
    printf("Upper Limit for channel 1 is %d\n\n", getHighLimit(CH1));
    printf("Lower Limit for channel 1 is %d\n\n", getLowLimit(CH1));
    setCurrentTemperature(CH1,temperatureSensor1Reading);

此代码块是我从同一项目中的其他 cpp 源文件调用我的函数以开始将当前温度与设定限制进行比较的地方。

comparedLimits1 = compareLimit(CH1);
SetConsoleTextAttribute(hConsole, 14);

if (comparedLimits1 == TRUE) {
printf("please press O to print out a temperature report for channel %i \n \n", selectChannel + 1);
printf("please press P to silence the alarm for channel %i \n \n", selectChannel + 1);
}

while(comparedLimits1 == TRUE) {
activateAlarm(CH1,temperatureSensor1Reading);
comparedLogs1 = sensorLog();
if (comparedLogs1 == TRUE) {
printf("\n Channel %i has registered a temperature of %i \n \n ", selectChannel+1, temperatureSensor1Reading);
}
}

这是我的函数,它将当前温度与设定的温度限制进行比较,并调用其他函数来“发出哔哔声”或允许用户打印出一行“报告”。

temperature_t compareLimit (int channelID)
{
temperature_t limitIsExceeded = FALSE;
if ((temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit) | (temperatureChannel[channelID].currentTemperature < temperatureChannel[channelID].lowLimit))
limitIsExceeded = TRUE;

return limitIsExceeded;
}

void activateAlarm(int channelID, temperature_t temperature)
{
int key = 0;

if ((temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit) | (temperatureChannel[channelID].currentTemperature < temperatureChannel[channelID].lowLimit))
callBeep();

sensorLog();
if (_kbhit())
key = _getch();

if ((key == 'P') | (key == 'p')) {
silenceBeep();
}
}

void callBeep()
{
Beep(250,2000);
}

void silenceBeep()
{
Beep(0,2000);
}

temperature_t sensorLog()
{
int key = 0;
temperature_t notedLog = FALSE;
if (_kbhit())
key = _getch();

if ((key == 'O') | (key == 'o')) {
notedLog = TRUE;
return notedLog;
}
}

这是我仍然希望在用户处于“警报”模式时能够操作的一段代码。为了让用户退出“警报”模式,他们必须能够降低当前温度,这可以通过以下案例陈述来完成

if( _kbhit()  ) {
selectedCommand = _getch();

switch(selectedCommand) {
case 'R': //if user input is R
case 'r'://if user input is r
(*temperatureSensorReadings[selectChannel])++;
break; //exits loop

case 'F': //if user input is 'F'
case 'f': //if user input is 'f'
(*temperatureSensorReadings[selectChannel])--;
break; //exits loop

最佳答案

使用 PlaySound 代替 Beep播放 .wav 文件而不是使用 SND_ASYNC 标志立即返回并异步播放声音。您甚至可以将其中一种系统声音与其中一种预定义值结合使用。

关于c - Beep 命令正在破坏我的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606344/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com