Signaler

Question sur les structures [Résolu]

Posez votre question Rune188 5Messages postés lundi 20 février 2017Date d'inscription 26 septembre 2017 Dernière intervention - Dernière réponse le 24 sept. 2017 à 18:44 par Rune188
Bonjour,
Je débute en programmation et j'essaye d'apprendre a utiliser les structures en c++
J'essaye de créé 2 chèques (structure) pour les remplir et les afficher a l'aide de fonctions.

J'arrive a les créés mais quand je les affiche les valeurs n'on pas été modifié :(
mon code:

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

struct cheque {
int numero;
int jour;
int month;
int year;
string beneficiaire;
double montant;
}chequeA,chequeB;

void remplir(cheque chequeA, int num);
void afficher(cheque chequeA);

int main()
{
int num=0;
cout << "Entrer le numero du cheque:" << endl;
cin >> num;
remplir(chequeA, num);
cout << "Entrer le numero du cheque:" << endl;
cin >> num;
remplir(chequeB, num);
afficher(chequeA);
afficher(chequeB);
cin >> num;
return 0;
}

void remplir(cheque chequeA,int num)
{
chequeA.numero = num;
cout << "Merci d'entrer les données suivante." << endl;
cout << "date:" << endl;
cout << "jour?" << endl;
int d;
cin >> d;
chequeA.jour=d;
cout << "mois?" << endl;
cin>>chequeA.month;
cout << "annee?" << endl;
cin >> chequeA.year;
cout << "beneficiaire ?" << endl;
cin >> chequeA.beneficiaire;
cout << "montant ?" << endl;
cin >> chequeA.montant;
}

void afficher(cheque chequeA)
{
cout << "cheque numero: " <<chequeA.numero << endl;
cout << "date:" << endl;
cout << chequeA.jour<<"/"<< chequeA.month<< "/" << chequeA.year<< endl;
cout << "beneficiaire :" << endl;
cout << chequeA.beneficiaire << endl;
cout << "montant :" << endl;
cout << chequeA.montant << endl;
}




Utile
+1
plus moins
'lut,
c'est normal, car en C et C++, les paramètres d'une fonction sont passés par valeur, autrement dit leur contenu est copié puis utilisé par la fonction. Comme il s'agit d'une copie, l'original n'est pas modifié.

En C comme en C++, on peut utiliser des pointeurs pour parler de la structure d'origine (et non d'une copie), mais en C++ on a les références, qui simplifient un peu les choses; pour s'en servir il suffit de transformer
void remplir(cheque chequeA,int num)
en
void remplir(cheque& chequeA,int num)
.

Mais étant donné ce que fait cette fonction, il serait plus judicieux d'en faire une fonction membre de la structure (tu verras ça plus tard dans tes cours/tutos).

Aussi, étant donné que la fonction afficher ne fait que lire des données du chèque, on peut 1. éviter une copie et 2. s'assurer de la non-écriture dans la structure à la compilation en changeant son prototype en:
void afficher(const cheque& chequeA)
Rune188 5Messages postés lundi 20 février 2017Date d'inscription 26 septembre 2017 Dernière intervention - 24 sept. 2017 à 18:44
Sa fonctionne !
Merci pour les explications :)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !