У меня есть несколько вопросов о музыке CS50.
1) Есть строка for (int i = 0, n = sizeof(NOTES) / sizeof(string); i < n; i++)
в notes.c
.Что означает sizeof ( string )?Я могу понять sizeof (NOTES), здесь NOTES - это массив строк.Но что строка означает в sezeof ( строка )?Я не могу его получить.
2) Вот моя реализация "частоты":
int frequency(string note)
{
char N[2];
int octave;
//parsing the string into a note...
strncpy(N, note, (strlen(note) - 1));
//...and its octave
octave = note[strlen(note) - 1] - '0';
//add semitones
int semitone;
if (strcmp(N, "C") == 0)
semitone = 1;
if (strcmp(N, "C#") == 0 || strcmp(N, "Db") == 0)
semitone = 2;
if (strcmp(N, "D") == 0)
semitone = 3;
if (strcmp(N, "D#") == 0 || strcmp(N, "Eb") == 0)
semitone = 4;
if (strcmp(N, "E") == 0)
semitone = 5;
if (strcmp(N, "F") == 0)
semitone = 6;
if (strcmp(N, "F#") == 0 || strcmp(N, "Gb") == 0)
semitone = 7;
if (strcmp(N, "G") == 0)
semitone = 8;
if (strcmp(N, "G#") == 0 || strcmp(N, "Ab") == 0)
semitone = 9;
if (strcmp(N, "A") == 0)
semitone = 10;
if (strcmp(N, "A#") == 0 || strcmp(N, "Bb") == 0)
semitone = 11;
if (strcmp(N, "B") == 0)
semitone = 12;
//calculate freq: semitones
float freq = 440 * (powf(2, (semitone -10) / (float)12));
//calculate freq: multiply by num of octaves
return round(freq * (powf(2, octave - 4)));
}
И вывод после ./notes:
C4: 262
C#4: 922746880
D4: 294
helpers.c:55:12: runtime error: value 5.85908e+09 is outside the range of representable values of type 'int'
D#4: -2147483648
E4: 330
F4: 349
F#4: -2147483648
G4: 392
G#4: -2147483648
A4: 440
A#4: -2147483648
B4: 494
Сам код работает, но он не работает в notes.c.
Пожалуйста, помогите мне понять, в чем дело.