Question sur les structures

Résolu/Fermé
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - Modifié le 24 sept. 2017 à 18:29
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 24 sept. 2017 à 18:44
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;
}




1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
24 sept. 2017 à 18:36
'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)
1
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024
24 sept. 2017 à 18:44
Sa fonctionne !
Merci pour les explications :)
0