如何解决此int溢出?

时间:2018-11-29 03:42:05

标签: c cs50

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中完成的,因此导入了许多命令和内容。我的程序可以正确编译,并且可以运行,那么如何解决此问题?

1 个答案:

答案 0 :(得分:0)

半音阶音符的频率不是整数。

如果向您传递了两个字符串,例如Cb,您将得到一个愚蠢的八进制,其频率太高。