Petit probleme dans mon code C++

truelife -  
pyschopathe Messages postés 1974 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Voila, comme mis dans le titre, j'ai un problème dans mon code. Voici la partie de code concernée:

int verification (int panier_2[],int nombre_entre, bool disponibilite)
{

disponibilite = false;
while (disponibilite != true)
{
cin >> nombre_entre;
int i = 0;
for (i = 0; i < 6; i++)
{
if (panier_2[i] == nombre_entre)
{
nombre_entre = panier_2[i];
disponibilite = true;
}
}
if (disponibilite != true)
{
cout << "veuillez inscrire un nombre disponible" << endl;
}

}
return nombre_entre;
}
int operation (int panier_2[])
{
int nombre_entre, disponibilite;
cout << "votre première plaque?" << endl;
verification (panier_2, nombre_entre, disponibilite);
cout << "voila le nombre tire " << nombre_entre << endl;


Donc le problème est que, dans la fonction "verification" , prenons que la variable "nombre_entre" vaut 1. "nombre_entre" est retourné par valeur. Mais dans "operation", quand j'appelle la fonction "verification" et que je demande d'affiché la valeur de "nombre_entre" (avec le cout), il ne me met pas un mais un nombre du genre 22811.

Pouvez vous m'aider s'il vous plais, j'en ai vraiment besoin :)

Merci d'avance
A voir également:

6 réponses

azureus33 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   7
 
c'est normal un grand nombre est le signe que ta variable n'est initialisé deux choix s'offre a toi
- comme tu a fais un return tu peut récupérer la valeur derrière la fonction ainsi

nombre_entre = verification (panier_2, nombre_entre, disponibilite);
Résultat les deux dernier paramètre sont inutile.

Sinon tu veut changé la valeur dans le paramètre alors dans se cas utilise un pointeur sa sert a sa ou bien
si tu n'est pas très doué avec les pointeur rajoute change le prototype de ta fonction "verification" avec un '&' sur le paramètre nombre_entre se qui donne :

int verification (int panier_2[],int &nombre_entre, bool disponibilite) ;

Ainsi ton paramètre ne seras pas une copie de ta variable mais partagera la même case mémoire
(passage par référence) Pour info c'est se type de paramètre (&) que l'on fait les constructeurs de copie en c++
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,


if (panier_2[i] == nombre_entre)
{
nombre_entre = panier_2[i];
disponibilite = true;
}

La ligne en gras est complètement inutile de par la condition (panier_2[i]==nombre_entre);

Lorsque tu mets : verification (panier_2, nombre_entre, disponibilite); tu passes une copie de nombre_entre.
La valeur ne sera donc pas modifiée.
Il faut passer l'adresse de l'argument (pointeur) ou par référence.

Cdlt
0
truelife
 
Merci beaucoup pour vos réponses, le problème est réglé :). Juste pour moi savoir maintenant, si je veux faire un passage par référence, je ne dois pas déclarer ma fonction comme étant une "void" et non plus "int"?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Non pour le passage par référence, tu changes le prototype de vérifcation en :
int verification (int panier_2[],int &nombre_entre, bool disponibilite)
L'appel se fera simplement par : verification(panier_2,nombre_entre, disponibilite);

Sinon effectivement le retour int de la fonction ne sert à rien, tu pourrais mettre void. Ou alors tu peux aussi utiliser le prototype : int verification (int panier_2[], bool disponibilite)
Et lors de l'appel : nombre_entre=verification(panier_2,disponibilite)

D'ailleurs, même remarque pour la variable disponibilite. Si tu veux la modifier, il faut passer soit son adresse soit sa référence.

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
truelife
 
alors quelle est la différence entre int et void? On m'a appris que pour le passage par référence se faisait avec void seulement
0
pyschopathe Messages postés 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
Le passage par référence peut se faire avec n'importe quel type de retour : comme il a déjà été dit, ça dépend de la logique de la fonction.

Pour ton code, pourquoi passes-tu disponibilité en paramètre alors que la première instruction de ta fonction initialise cette variable (donc que sa valeur ne t'intéresse pas) ?
0
azureus33 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   7
 
int ou void en début du prototype correspond au type de la valeur renvoyé par le return.

or quand tu fait un passage par référence si le résultat que tu veut se trouve dans les parametres alors un int en retour devient inutile cependant cela n'est pas faux de mettre un int en retour si celui-ci est utile a quelque chose, suit ta logique c'est avec l'expérience que tu comprendras se qui est le mieux.
0