此程序到目前为止扫描频率范围0-20000 Hz并在屏幕上每50 Hz打印一次,然后在达到20000 Hz时停止。如果我在屏幕midi键盘上移动控件,它也会停止。
现在我要做的就是修改它,以便当它达到2000赫兹而不是停止时,程序会给用户一个选项,例如"你想要开始这个吗?再次编程?",如果用户键入' Y'然后它会重新开始,但如果用户键入' N' N' N' N'该计划将停止。我相信do while
是我正在寻找的,但我已经尝试过,而且似乎无法让它发挥作用。
我的代码:
#include "aservelibs/aservelib.h"
#include <stdio.h>
#include <math.h>
int main()
{
int frequency = 0.0;
int modulation = aserveGetControl(1);
printf("aserve get note control is %d\n", modulation);
do
{
while( frequency < 20000.0 && modulation == 0)
{
modulation = aserveGetControl(1);
aserveOscillator(0,frequency,1.0,0);
printf("The frequency is: %dHz\n", frequency);
frequency = frequency + 50.0;
aserveSleep(20);
}
char userInput;
printf("enter 'y' if you would like to repeat: ");
scanf(" %c", &userInput);
while(userInput == 'y');
}
return(0);
}
答案 0 :(得分:4)
您的概念是正确的,但您错过了do while
循环的语法。
应该是
do {
} while(condition);
因此,修改后的代码将是
#include "aservelibs/aservelib.h"
#include <stdio.h>
#include <math.h>
int main()
{
int frequency = 0.0;
int modulation = aserveGetControl(1);
printf("aserve get note control is %d\n", modulation);
char userInput;
do
{
while( frequency < 20000.0 && modulation == 0)
{
modulation = aserveGetControl(1);
aserveOscillator(0,frequency,1.0,0);
printf("The frequency is: %dHz\n", frequency);
frequency = frequency + 50.0;
aserveSleep(20);
}
printf("enter 'y' if you would like to repeat: ");
scanf(" %c", &userInput);
} while(userInput == 'y');
return(0);
}
答案 1 :(得分:3)
首先,您遇到语法错误:while
子句必须放在循环体之外:
do
{
}
while(someCondition); // here!
在循环体内定义的变量在其外部无法访问 - 因此您需要在之前声明它们:
char userInput;
do
{
}
while(userInput == 'y');
除此之外,您的代码应该可以正常工作。