Procédure en c

Résolu
giovedy -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
giovedy
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
giovedy
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
giovedy
 
c'est bien ça ! merci beaucoup !
0
dna.factory Messages postés 26003 Date d'inscription   Statut Modérateur Dernière intervention   1 619
 
déja utiliser la mémoire c dans deux endroits pour des utilisations différentes, c'est MAL
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 26003 Date d'inscription   Statut Modérateur Dernière intervention   1 619
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 26003 Date d'inscription   Statut Modérateur Dernière intervention   1 619
 
pourquoi utiliser une procédure, c'est d'une fonction dont tu as besoin..
-1
scaravenger Messages postés 2685 Date d'inscription   Statut Membre Dernière intervention   617
 
les variables C et D sont locales.
-1