以下代码中的问题是第二个for循环似乎未执行。
我添加了printf("1");
andprintf("h");
语句以测试循环是否正在执行。程序打印1,但不打印h。
有关该程序的一些背景信息是,我应该分配一个2D数组,并在该数组的每一行中以不同的频率存储正弦波。
变量PI
也定义为带有值的宏acos(-1).
short int** Notes = (short int**) calloc(25,sizeof(short int*));
for(int x = 0; x < 25; x++){
Notes[x] = (short int*) calloc(44100 * (1/3),sizeof(short int));
}
for(int x = 0; x < 25; x++){
float freq;
switch(x){
case 0:
freq = 440.00;
break;
case 1:
freq = 466.16;
break;
case 2:
freq = 493.88;
break;
case 3:
freq = 523.25;
break;
case 4:
freq = 554.37;
break;
case 5:
freq = 587.33;
break;
case 6:
freq = 622.25;
break;
case 7:
freq = 659.25;
break;
case 8:
freq = 698.46;
break;
case 9:
freq = 739.99;
break;
case 10:
freq = 783.99;
break;
case 11:
freq = 830.61;
break;
case 12:
freq = 880.00;
break;
case 13:
freq = 932.33;
break;
case 14:
freq = 987.77;
break;
case 15:
freq = 1046.50;
break;
case 16:
freq = 1109.73;
break;
case 17:
freq = 1174.66;
break;
case 18:
freq = 1244.51;
break;
case 19:
freq = 1318.51;
break;
case 20:
freq = 1396.91;
break;
case 21:
freq = 1479.98;
break;
case 22:
freq = 1567.98;
break;
case 23:
freq = 1661.22;
break;
case 24:
freq = 0.00;
break;
}
printf("1");
for(int y = 0; y < 44100 * (1/3); y++)
{
Notes[x][y] = 32700 * sin(2 * PI * freq * (y/44100));
printf("h");
}
}
for(int y = 0; y < 44100 * (1/3); y++)
该子语句从不执行,因为y < 44100 * (1/3)
它始终为false。这是因为整数除法将舍入为零,(1/3)
因此44100 * (1/3)
也为零。
假设您想要的值是44100的三分之一,只需编写即可44100/3
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句