le contrôle peut atteindre la fin de la fonction non-vide en C

j’ai eu ce bogue et je ne peux pas le déboguer

helpers.c: 136: 1: erreur: le contrôle peut atteindre la fin de la fonction non-vide

l’IDE dit en dernière ligne }

voici mon code

// Calculates frequency (in Hz) of a note int frequency(ssortingng note) { // TODO if (strlen(note) == 2) { if (note[0] == 'A') { int freq = round(440 * (pow(2, (((int) note[1]) - 52)))); return freq; } else { if (note[0] == 'A') { if (note[1] == '#') { int freq = round(466 * (pow(2, (((int) note[2]) - 52)))); return freq; } else if (note[1] == 'b') { int freq = round(415 / (pow(2, (((int) note[2]) - 52)))); return freq; } } } } 

Vous avez besoin d’un retour sur tous les chemins de code. Regardons votre exemple:

 int frequency(ssortingng note) { // TODO if (strlen(note) == 2) { if (note[0] == 'A') { int freq = round(440 * (pow(2, (((int) note[1]) - 52)))); return freq; } // return what? else { if (note[0] == 'A') { if (note[1] == '#') { int freq = round(466 * (pow(2, (((int) note[2]) - 52)))); return freq; } else if (note[1] == 'b') { int freq = round(415 / (pow(2, (((int) note[2]) - 52)))); return freq; } // return what? } // return what? } } 

Une option consiste à déclarer une freq au début de votre bloc de code avec une valeur par défaut. Vous pouvez alors modifier cette valeur à partir des conditions souhaitées, puis la renvoyer à la fin de la fonction. Par exemple:

 int frequency(ssortingng note) { int freq = 0; // TODO if (strlen(note) == 2) { if (note[0] == 'A') { freq = round(440 * (pow(2, (((int) note[1]) - 52)))); } else { if (note[0] == 'A') { if (note[1] == '#') { freq = round(466 * (pow(2, (((int) note[2]) - 52)))); } else if (note[1] == 'b') { freq = round(415 / (pow(2, (((int) note[2]) - 52)))); } } } return freq; } 

“J’ai ce bogue et je ne peux pas le déboguer”

Pourquoi ne pouvez-vous pas le déboguer? Je pense que c’est l’un des messages les plus simples et les plus évidents du compilateur?

Pensez simplement:
Que se passera-t-il si strlen(note) est autre chose que 2 (disons 3 ou 7 ) ?
Que se passera-t-il ensuite si la note[0] est autre chose que 'A' (disons 'B' ou 'C' ) ?

Alors que va revenir votre fonction?

Réponse:
Votre code atteindra la fin de la fonction, qui doit renvoyer un int , mais n’aura rien renvoyé!