我已经忍受了持续时间和is_rest,但似乎无法理解我的频率代码出了什么问题。 我基本上已经完成了三个步骤; 1)确定由strlen区分偶然性和正常性。 2)确定钢琴键(首字母)。 3)然后确定八度,然后继续。我将所有7个字母重复八度。 现在,当我运行该程序时,无论是偶然还是正常,我都会得到相同的答案,即 A4和A6会返回相同的值-2147483648 。 我花了很多时间来解决它,但无济于事。有人可以浏览一下我的代码,告诉我怎么了。
int frequency(string note)
{
int a, b, c, d, e, f, g, n, o, p, q, r;
double freq = 440;
// TODO
//if note is XY
if (strlen (note) == 2)
{
if (note[0] == 'A')
{
a = note[1];
if (a < 4)
{
return round ( freq / pow(2,(4 - a)));
}
if (a > 4)
{
return round ( freq * pow(2, (a - 4)));
}
else if (a == 4)
{
return 440;
}
}
答案 0 :(得分:0)
问题从a = note[1];
开始。请记住,note[1]
是八度的 ascii表示。回忆一下pset2如何将一个字母“转换”为它的“字母索引”。这是无聊的。 (ascii table供参考)
ascii中的“ 4”为52。因此,此pow(2, (a - 4));
计算出一个非常非常大的数字,有效地“降低了精度”(因为该函数返回一个int)。
这可能不是函数中的唯一问题,但是更正它会使事情进展。现在可能是时候熟悉并熟悉debug50了。