Multiplication en C

Discutez d'informatique ici !
jujudu597
Membre Naturel
Messages: 87
Enregistré le: 20 Fév 2014, 18:13

Multiplication en C

par jujudu597 » 02 Fév 2015, 12:26

Bonjour,

Je débute en C et j’essaie de créer une fonction qui a deux réels en entrée me renvoi la multiplication des deux. Rien de bien compliqué mais je n'y arrive pas. Voici ma fonction:

#include

float Produit (float x, float y)
{
return (x*y)
}

float main (void)
{
float m;
m = Produit (3.9 , 4.48 ) ;
printf ("le produit de 3.9 et 4.48 est %f \n " , m );
}


Ma fonction fonctionne mais jai bcp d'erreur à la compilation. Je voudrais donc savoir si vous pouviez m'aider a améliorer cela .

Merci davance :)



Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 02 Fév 2015, 12:35

Bonjour,

Déjà dans ta fonction Produit, il manque un ; à la fin de ton return.

Code: Tout sélectionner
float produit(float x, float y) {
   return (x * y);
}


Ensuite le prototype du main est :

Code: Tout sélectionner
int main(void) {
    return (0); /* Il ne faut pas oublier celà */
}


Par ailleurs les erreurs sont plutôt claires :
main.c: In function 'Produit':
main.c:6: error: expected ';' before '}' token => Ligne 6, il manque un ';' avant le '}'
main.c: At top level:
main.c:9: warning: return type of 'main' is not 'int' => Ce n'est pas une erreur mais un warning ici => le retour du main n'est pas un 'int' (cf. ma remarque précédente)

jujudu597
Membre Naturel
Messages: 87
Enregistré le: 20 Fév 2014, 18:13

par jujudu597 » 02 Fév 2015, 18:38

Merci bcp pour votre réponse.

Mais pourquoi doit on mettre un "int" avant le main.
J'ai lu qu'avant le "main" on y mettais le type de retour donc un float voir un void mais pourquoi un int?
Et pourquoi dois ton renvoyer systématiquement 0?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 02 Fév 2015, 23:00

0 indique que le programme a quitté correctement.
Tu as le droit de mettre autre chose, mais généralement quand tu retournes pas 0 ca veut dire que ya eu une erreur...

le retour du main dépend de la norme que tu utilises dans les très vieux C, ca devait etre du void main (où pour le C de l'embarqué par exemple). Mais généralement, c'est int main à retourner. Quant au pourquoi un int, probablement parce que tu as besoin d'un retour pour indique si erreur il y a eu, et que la valeur retournée est un nombre, mettre un char n'a pas de sens sémantique car c'est censé etre un caractere, mettre un short c'est un peu con de réserver deux bytes alors que la plus ptite entité adressable c'est un int, donc autant mettre un int... (enfin c'est que supposition sans avoir cherché sur le net)
la vie est une fête :)

dlzlogic2
Membre Naturel
Messages: 38
Enregistré le: 06 Oct 2014, 13:40

par dlzlogic2 » 02 Fév 2015, 23:27

Petite intervention timide : la fonction int main() ou int main(int , char**)
Dans mon bouquin, il y 4 prototypes de la fonction main, à ma connaissance, c'est la seule fonction du langage, toutes les autres sont des fonctions de bibliothèques.
Dans le bouquin K&R, le "int" ne semble pas obligatoire. S'il n'y a pas d'"int" il n'y a pas besoin de mettre un return ..., mais c'est une bonne habitude d'écrire int main()
De toute façon, si on met autre chose que "int", ça risque de planter la machine au retour, c'est à dire à la fin de l'exécution. Donc dans tous les cas, il faut mettre int.

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 03 Fév 2015, 09:58

dlzlogic2 a écrit:Petite intervention timide : la fonction int main() ou int main(int , char**)
Dans mon bouquin, il y 4 prototypes de la fonction main, à ma connaissance, c'est la seule fonction du langage, toutes les autres sont des fonctions de bibliothèques.
Dans le bouquin K&R, le "int" ne semble pas obligatoire. S'il n'y a pas d'"int" il n'y a pas besoin de mettre un return ..., mais c'est une bonne habitude d'écrire int main()
De toute façon, si on met autre chose que "int", ça risque de planter la machine au retour, c'est à dire à la fin de l'exécution. Donc dans tous les cas, il faut mettre int.


Par ailleurs, suivant certains paramètres (compilateur, option de compilation, configuration de l'os), un prototype du type
Code: Tout sélectionner
void main(void)
peut renvoyer un warning ou une erreur.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 20 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite