Code Blocks error before int

Résolu/Fermé
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 - 23 nov. 2009 à 00:56
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 - 23 nov. 2009 à 18:43
Bonjour,
je commence a programmer en C sur code::blocks

voici mon code , quand je clique sur débuggage, il met une erreur ( a la ligne ou c'est indiqué en commentaire)
je ne voi pa d'ou vien cette erreur .Merci beaucoup pour l'aide que vous pourriez m'apporter.
(note: les prototypes qui sont marqués ne sont pas fonctionnels étant donné que leur fichier napparait dans lezs directives de préprocesseur. je teste ce code pour vérifier sil marche indépendamment , sans les prototypes.)

#include <math.h>
#include <stdio.h>
#include <stdlib.h>





int main()
{
printf("Bienvenue dans la calculette V2");
printf("\n\n");
printf("Tapez le chiffre de votre operation");
printf("\n\n");
printf("1==>Addition");
printf("\n\n");
printf("2==>Soustraction");
printf("\n\n");
printf("3==>Multiplication");
printf("\n\n");
printf("4==>Division");
printf("\n\n");

int demande1 = 0;// création de la variable pour le choix

scanf("%d", &demande1); // on défini la demande1 qui permettra de faire le choix du menu avec le switch suivant

switch (demande1)
{
case 1:

int Addition(int valeur1, valeur2, valeur3, valeur4, resultat, valeur9); //prototype (ici error before int)

case :2

int Sousteaction(int valeur5, valeur6, resultat2, valeur9);

case :3

int Multiplication(int valeur7, valeur8, resultat3, valeur9);

}


return 0;
}
A voir également:

3 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2009 à 01:11
hum... je ne comprends pas trop ce que tu veux faire avec ton switch.

Tu mets dedans des définitions de fonctions, mais des fonctions ne peuvent pas être définies dans main(). On ne peut pas définir une fonction dans une autre fonction (et main n'est qu'une fonction spéciale).

Les définitions doivent se faire après ou avant le bloc main().

Si tu les mets après (ce qui est conseillé pour la clarté de ton fichier), il faut tout de même mettre des prototypes avant main() car sinon le compilo ne sait pas ce qu'il se passe.

En fait l'erreur que te donne le compilo est que avant le "int " qui comment la déclaration de fonction, tu te trouves dans un bloc {, ce qui est impossible.


ce que tu peux mettre dans ton bloc switch ce sont des appels à la fonction.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2009 à 01:15
ensuite il y aussi dverses erreurs de syntaxe ( case : 2 au lieu de case 2:, ...) et de logique (oubli du break; à la fin des case !)
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2009 à 01:18
et pardon, je voulais dire prototype au lieu de définition, mais l'erreur est idem.

Remarque aussi que dans un prototype ou une définition de fonction il faut mettre le type pour tous les arguments, pas seulement le premier comme quand tu définis des variables.
Et en plus dans les prototypes tu peux te passer du nom des variables. (Mais pas du type!)

Ex :

//définition correcte
int mafonction(int a, int b) {
//...
}

//prototypes corrects
int mafonction(int a, int b);
int mafonction(int, int);

//définition incorrecte
int mafonction(int a, b) {
//...
}
0
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 4
23 nov. 2009 à 07:12
Waw merci pour cette réponse détaillée et rapide!

D'apres ce que jeai compris, on donne juste apres les directives de préprocesseur, les prototypes
et apres on fait appel à la fonction n'importe ou dans le main . et si on inclu le .h dans lequel est situé cette fonction , ça marchera tout seul? (je veu dire il la trouvera?).

En suirte j'aimeai que tu me fasse un exemple d'un prototype et de lappel de fonction qui lui correspond stp


Merci Beaucoup!
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
23 nov. 2009 à 13:48
oui. l'important est qu'avant main() le compilateur connaisse la syntaxe d'appel des fonctions que tu utilises dedans. Tu as donc plusieurs possibilités :

/////////////
// *définitions des fonctions "accessoires"
// *définition de la fonction main()
//////////

ou

/////////////
// *prototypes des fonctions "accessoires"
// *définition de la fonction main()
// *définitions des fonctions accessoires
//////////

ou

/////////////
// * inclusion d'un fichier externe qui fait ce que j'ai dit plus haut
// habituellement c'est un fichier de prototypes uniquement qu'on
// appelle un .h (h comme header : en-tête)
// il faut bien sûr que dans ce fichier .h tu fasses un include du .C ou .CPP
// afin de définir les fonctions correspondantes
// * définition de la fonction main()
//////////

Les exemples concret je suis sûr que tu arriveras à les faire toi ;).


Pour les projets à partir d'une certaine taille, on sépare donc le programme en plusieurs fichiers et aussi on sépare les fichiers de prototypes .h des fichiers d'implémentation des fonctions .cpp .

Il y a plusieurs raisons à cela.

1) deux fonctions peuvent s'appeler l'un l'autre. Il est donc obligatoire dans certains cas d'avoir des prototypes avant, sinon le compilateur ne comprend rien.
2) Je trouve que la raison majeure est pour la clarté du programme.
Ex : tu as programme tes fonctions additionner, soustraire, etc... correctement. Maintenant tu codes ton main(). Et là tu te dis "zut, dans quel ordre j'ai mis les argument ? Quel type me renvoie la fonction exactement ? Alors tu n'as qu'à aller voir le fichier .h, tu trouves rapidement le prototype ta fonction, et hop là c'est bon. Sinon tu dois rechercher dans le cpp qui est bien sûr beaucoup plus gros habituellement.
Tu n'as pas besoin de savoir exactement comment est écrite ta fonction pour l'appeler, tu veux juste savoir quels sont les arguments à mettre.
D'ailleurs une bonne pratique est de bien commenter ton fichier .h afin de décrire l'effet des différents arguments.
0
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 4
23 nov. 2009 à 18:43
Re Merci pour tt ces réponses claires!!!!
Ca fait plaisir!
0