【发布时间】:2016-03-23 21:47:02
【问题描述】:
这是我在这里的第一篇文章,所以请对我温柔一点。我最近在我的大学开设了一个 C 编程课程,我对它非常感兴趣。由于我正在处理音频(混合/母带音乐),我决定尝试制作一个简单的程序来计算用户定义的 BPM(每分钟节拍)的延迟时间(毫秒)。
我目前遇到的问题是:我希望程序返回开始,如果用户输入了错误的 BPM(在这种情况下为 0),我希望用户再次输入。
我尝试了 do while 循环,但它并没有完全正确,我的程序仍然会计算所有内容,就好像用户刚刚输入了 0,如果我输入了正确的值,它只会循环没完没了。
如果我执行 if else 语句,它会给用户一条消息,但我想连同消息一起提示用户再次输入。
我知道这是一个非常简单和基本的问题,但我们将不胜感激。
到目前为止,这是我的代码:
int main(){
float BPM;
printf("Please input the BPM: ");
scanf(" %f", &BPM);
do{
float HZ = 1000;
float HZ_Result;
float BPM_QuarterNote=(60/BPM)*1000;
float BPM_WholeNote=BPM_QuarterNote*4;
printf("\n\nDelay time for whole note is: %.2f ms or %.2f Hz", BPM_WholeNote, 1000/BPM_WholeNote);
float BPM_HalfNote=BPM_QuarterNote*2.0;
printf("\n\nDelay time for 1/2 note is: %.2f ms or %.2f Hz", BPM_HalfNote, 1000/BPM_HalfNote);
printf("\n\nDelay time for 1/4 note is: %.2f ms or %.2f Hz", BPM_QuarterNote, 1000/BPM_QuarterNote);
float BPM_EightNote=BPM_QuarterNote*0.5;
printf("\n\nDelay time for 1/8 note is: %.2f ms or %.2f Hz", BPM_EightNote, 1000/BPM_EightNote);
float BPM_SixteenthNote=BPM_QuarterNote*0.25;
printf("\n\nDelay time for 1/16 note is: %.2f ms or %.2f Hz", BPM_SixteenthNote, 1000/BPM_SixteenthNote);
float BPM_32ndNote=BPM_QuarterNote*0.125;
printf("\n\nDelay time for 1/32 note is: %.2f ms or %.2f Hz", BPM_32ndNote, 1000/BPM_32ndNote);
}while(BPM > 0);
return 0;
}
【问题讨论】:
-
请显示您尝试的循环。
-
请同时检查
scanf的返回值以及扫描的输入值。如果scanf没有返回1,您正在测试未初始化的变量BPM。 -
听起来您只想围绕用户输入部分进行循环——第一个
printf()和scanf()。 -
@kaylum 很抱歉速度很慢,我编辑了主要帖子以显示我尝试做的事情,你能解释一下正确的方法吗?
-
重新进行循环编辑:
60/BPM部门将崩溃,因为您在 之前检查是否BPM > 0。
标签: c loops while-loop do-while