Procédure en c
Résolu
giovedy
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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);
}
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);
}
A voir également:
- Procédure en c
- Procédure de frigo vide ✓ - Forum Consommation & Internet
- Le point d'entree de procedure est introuvable kernel32 dll ✓ - Forum Windows
- Le point d'entrée de procédure iswow64process2 est introuvable - Forum Windows
- Le point d'entrée de procédure eventsetinformation est introuvable advapi32.dll - Forum Windows
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
4 réponses
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
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
déja utiliser la mémoire c dans deux endroits pour des utilisations différentes, c'est MAL
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...
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...
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...
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...
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 ?
Du coup, il y a peut-être plus simple que le code qui suit mais je ne sais plus trop :