int frequency(string note)
{
int i;
float f;
int n=0;
float octave= note[strlen(note)-1];
if(strlen(note)==3)
{
if(note[1]=='#')
{
n+=1;
}
else if(note[1]=='b')
{
n-=1;
}
}
if(note[0]=='B')
{
n+=2;
}
else if(note[0]=='C')
{
n-=9;
}
else if(note[0]=='D')
{
n-=7;
}
else if(note[0]=='E')
{
n-=5;
}
else if(note[0]=='F')
{
n-=4;
}
else if(note[0]=='G')
{
n-=2;
}
n+=(octave-4.0)*12.0;
float p= n/12.0;
f=(int)(round(pow(2.0,p)*440.0));
return f;
}
因此,基本上,每当我运行此代码时,我都会收到一条错误消息,指出“运行时错误:值7.3641e + 16在'int'类型的可表示值范围之外”
然后返回的值就是2147483648。我已经在网上查找了它,却没有找到可以帮助我编写代码的答案。这也是在cs50 IDE中完成的,因此导入了许多命令和内容。我的程序可以正确编译,并且可以运行,那么如何解决此问题?
答案 0 :(得分:0)
半音阶音符的频率不是整数。
如果向您传递了两个字符串,例如Cb,您将得到一个愚蠢的八进制,其频率太高。