Procédure en c

Résolu/Fermé
giovedy - Modifié par giovedy le 6/10/2011 à 13:02
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 oct. 2011 à 14:27
Bonjour,

voila je suis complètement débutant en C et j'aimerai m'entraîner à utiliser une procédure. Le problème est que je m'attends à voir apparaître la valeur 9 et 10, alors que j'obtiens la valeur 4 et 5. Pourquoi ?

Merci !

Voici le petit programme :

void plus(int c,int d)
{
c=c+d;
d=d+5;
}


void main (void)

{
int a=4;
int c=5;
plus(a,c);
printf("%d,%d\n",a,c);


}

4 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 6/10/2011 à 13:24
Les variables sont passées par copie, du coup c et d valent bien 9 et 10 à la fin de la procédure plus, mais la modification n'est pas répercutée sur les valeurs de a et c du main.
Il faut utiliser un & pour pouvoir faire un passage par variable : void plus(int &c, int &d) La confiance n'exclut pas le contrôle
2
très bien !

Mais j'ai une petite erreur de compil sur cette ligne : void plus(int &c, int &d)

voici l'erreur : expected `;', `,' or `)' before `&' token

que me conseilles tu ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 oct. 2011 à 13:40
Bah cette ligne remplace ta précédente void(int c,int d), mais tu dois quand même rajouter reste de ton code à la suite :

void plus(int &c,int &d)
{
    c=c+d;
    d=d+5;
}
0
oui oui c'est bien ce que j'ai fait

#include <stdio.h>


void plus(int &c,int &d)
{
    c=c+d;
    d=d+5;
}
void main (void)
{
int a=4;
int b=5;
plus(a,b);
printf("%d,%d\n",a,b);
}
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 6/10/2011 à 13:53
Autant pour moi, je me suis (encore) mélangé les pinceaux avec le C++
Du coup, il y a peut-être plus simple que le code qui suit mais je ne sais plus trop :

#include "stdio.h" 

void plus(int *c,int *d) 
{ 
    (*c) = (*c)+(*d); 
    (*d) = (*d)+ 5; 
} 

void main () 
{ 
    int a=4; 
    int b=5; 
    plus(&a,&b); 
    printf("%d,%d\n",a,b); 
}
0
c'est bien ça ! merci beaucoup !
0
dna.factory Messages postés 25384 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 29 novembre 2024 1 613
6 oct. 2011 à 13:32
déja utiliser la mémoire c dans deux endroits pour des utilisations différentes, c'est MAL
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 oct. 2011 à 13:47
Je ne vois pas le problème vu qu'elles sont toutes les deux utilisées en locale...
On ne peut quand même pas construire tout un programme en utilisant seulement une seule fois chaque nom de variable !
0
dna.factory Messages postés 25384 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 29 novembre 2024 1 613
6 oct. 2011 à 14:06
KX Oo
bien sur que SI
la seul exception étant le i de la boucle for (et encore, c'est mieux si on peut faire autrement)
C'est la regle numéro 1 en programation
chaque variable est unique, et explicite.
c'est encore plus important qu'un code commenté.

dans un programme de 10 lignes avec une procédure, c'est peut-etre pas important, quand tu devras dépanner un programme de 10 000 lignes avec des centaines de procédures et fonctions, et que ce n'est pas toi qui l'a fait... ou pire, c'est toi qui l'a fait, mais y'a 10 ans...
tu comprendras...
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 oct. 2011 à 14:27
Toi tu parlais de "la mémoire c" or ce n'est pas la même mémoire, vu que ce sont deux variables différentes, l'une est locale au main, l'autre en paramètre de fonctions. Il n'y a pas d'ambiguïté.
Effectivement on peut critiquer le fait d'utiliser deux fois le même nom, ou encore d'utiliser un nom avec une seule lettre... Mais dans ce genre de programmes on ne va pas chipoter !

Le message a été effacé, mais tout à l'heure quelqu'un proposait d'utiliser une variable globale à la place du c local au main, et là ça aurait été vraiment mal !!!
Mais bon, de toute façon ce n'était pas le problème, qui est résolu maintenant...
0
dna.factory Messages postés 25384 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 29 novembre 2024 1 613
6 oct. 2011 à 12:55
pourquoi utiliser une procédure, c'est d'une fonction dont tu as besoin..
-1
scaravenger Messages postés 2685 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 30 janvier 2015 616
6 oct. 2011 à 13:08
les variables C et D sont locales.
-1