IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[Débutant] Pourquoi ma fonction déconne ?


Sujet :

C

  1. #1
    Membre régulier Avatar de clampin
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 96
    Points : 105
    Points
    105
    Par défaut [Débutant] Pourquoi ma fonction déconne ?
    Bonjour,

    Pour être sur d'avoir bien compris les fonctions, j'ai modifié un exemple de mon bouquin "Le programmeur, Le langage C". Je suis sur le chapitre des fonctions. Je pensais avoir compris, mais visiblement pas. j'aimerai donc comprendre un peu pourquoi ça ne fonctionne pas. Car dans l'exemple original on ne demande que 2 nombres, je m'était dit que pour 3 nombres, il suffisait de déclarer un int en plus dans les parenthèses de ma fonction.

    Alors voilà, mon programme très simple, doit additionner 3 nombres entrés par l'utilisateur. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
     
    int nombre1, nombre2, nombre3;
     
    int LeCalcul(int x, int y, int z);
     
    int main (int argc, const char * argv[]) {
     
        printf("Entrez le premier nombre : ");
        scanf("%d",&nombre1);    
     
        printf("Entrez le second nombre : ");
        scanf("%d",&nombre2);
     
    	printf("Entrez le troisième nombre :");
    	scanf("%d",&nombre3);
     
     
        /* Affichage du résultat par un printf */
        printf ("\nLe produit de %d et de %d et %d : %d\n",nombre1, nombre2, nombre3,LeCalcul(nombre2,nombre2,nombre3)); 
        return 0;
    }
     
    /* fonction LeCalcul qui fait une bête addition de 3 nombres, en int */
     
    int LeCalcul(int x, int y, int z)
    {
    	int total;
     
    	total = x + y + z;
     
    	return(total);
     
    }
    et voici les exemple de sortie que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    MonCalcul has exited with status 0.
    [Session started at 2006-07-16 08:25:40 +0200.]
    Entrez le premier nombre : 10
    Entrez le second nombre : 10
    Entrez le troisième nombre :10
     
    Le produit de 10 et de 10 et 10 : 30
     
    MonCalcul has exited with status 0.
    [Session started at 2006-07-16 08:25:51 +0200.]
    Entrez le premier nombre : 65
    Entrez le second nombre : 1
    Entrez le troisième nombre :1
     
    Le produit de 65 et de 1 et 1 : 3
    Pourquoi donc ça foire ? Ou est mon erreur, qui doit être stupide, mais j'avoue ne pas voir ou ?

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Lors de l'appel de la fonction, tu lui passes en parametre 'nombre2, nombre2, nombre3) au lieu de (nombre1, nombre2, nombre3), d'ou l'erreur.

    Sinon juste deux-trois remarques en vrac :
    * ce n'est pas un produit mais une somme,
    * nombre1, nombre2 et nombre3 n'ont aucunes raisons d'etre des variables globales. Elles devraient etre locales au main,
    * tu n'utilises pas argc et argv il est donc inutile de les mettre (ca doit meme, si le niveau de warning de ton compilateur est bien regle, d'avertir qu'il existe des parametres non utilisees). Donc int main(void) suffit amplement,
    * la sortie standard etant bufferisee, pour ne pas avoir de surprise tu devrais rajouter un retour a la ligne a chaque message d'affichage ou appeler fflush(stdout) apres printf(),
    * concernant l'usage de scanf pour recuperer la saisie, je te le deconseille. Pour plus de details, je te renvoie aux differentes discussion de ce forum abordant ce sujet.

  3. #3
    Membre régulier Avatar de clampin
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 96
    Points : 105
    Points
    105
    Par défaut
    Mon dieux, j'ai vu mon erreur... stupide... Et j'espère avoir bien compris....

    oui, oui, je sais pour scanf (en fait j'ai lu), mais pour l'instant dans mon bouquin on utilise scanf, mais plus loin on l'utilise moins. mais là c'était juste pour voir si j'avais compris le concept des fonctions.

    En tout cas, merci pour tes remarques, je les gardes sous le coude pour mes programmes suivants.

    Merci....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/04/2007, 16h02
  2. [Débutant] Notation de fonction
    Par zuckonline dans le forum Scheme
    Réponses: 5
    Dernier message: 05/11/2006, 07h02
  3. [Débutante] Pourquoi ça ne marche pas...?
    Par Tootsi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/02/2006, 16h58
  4. [Débutant] Pointeurs et fonctions
    Par vinzzzz dans le forum C
    Réponses: 5
    Dernier message: 15/01/2006, 15h25
  5. [Débutant] Aide utilisation fonctions :(
    Par trakiss dans le forum Débuter
    Réponses: 10
    Dernier message: 27/08/2004, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo