Problème de changement de données d'un tableau

martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007 - 20 nov. 2006 à 20:37
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007 - 21 nov. 2006 à 17:08
Bonjour,
j'ai débuté un programme qui devrait lire des données dans un fichier pour ensuite les traiters, et je suis bloqué puisqu'après avoir lu les données dans le fichier et les avoir mi dans un tableau, les données sont changées tel que l'affichage d'une seule cellule du tableau me donnera plusieurs résultats, mais ne devrait qu'en contenir un seul..

mon code (note.. une ligne de code mise en commentaire avant la fonction d'affichage me prouve que les données sont bien entrée dans le tableau..cependant ce tableau semble se faire modifier par la suite, je ne sais pourquoi)
tout aide serait apprécié..merci


<hr />
#include<fstream>
#include//librairie cin cout
#include//pour setw io...flag..
#include<cstring>
using namespace std;
const int max_employes=80;
//définition des fonctions
int lireinfo(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], char nom_fichier[max_employes]);
void afficheremployes(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], int retour_nb_employes);
/*void salairemax(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], int retour_nb_employes);
ajustersalaire(int, int);
afficheremployés(char, char, int, int);*/ 
void main(void)
{
 //déclaration des variables
 char nom_prenom[max_employes][30];
 int nb_heures[max_employes];
 float taux_horaire[max_employes];
 char nom_fichier[max_employes];
 int retour_nb_employes;
 //demande à l'utilisateur d'entrer le nom du fichier à ouvrir
 cout << "Quel est le nom du fichier sauvegarde pour les employes? ";
 //prend la réponse dans la variable nom_fichier
 cin >> nom_fichier;
 //appel des fonctions
 retour_nb_employes=lireinfo(nom_prenom, nb_heures, taux_horaire, nom_fichier);
 afficheremployes(nom_prenom, nb_heures, taux_horaire, retour_nb_employes);
 salairemax(nom_prenom, nb_heures, taux_horaire, retour_nb_employes);
 /*ajustersalaire();
 afficheremployes();*/
}
//fonction de lecture des information dans le fichier
int lireinfo(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], char nom_fichier[40])
{
 int nb_employes=0;
 ifstream fichier_employes;
 fichier_employes.open(nom_fichier);
 if(fichier_employes.fail())
 {
  cout << "Erreur d'ouverture de fichier";
 }else{
  while(!fichier_employes.eof())
  { 
   fichier_employes.getline(nom_prenom[nb_employes], 33 , ':');
   fichier_employes >> nb_heures[nb_employes] >> taux_horaire[nb_employes];
  
  // cout << nom_prenom[nb_employes] << ":"  << nb_heures[nb_employes] << " * $ "<< taux_horaire[nb_employes] << "= $" << nb_heures[nb_employes]*taux_horaire[nb_employes] << endl;

   nb_employes++;
   
  }
 }
 fichier_employes.close();
 return nb_employes;
}
//fonction d'Affichage des données lu dans le fichier
void afficheremployes(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], int retour_nb_employes)
{
 //déclaration de variable
 int nb_lu;
 //affiche le nombre d'employés
 cout <<  "nombre total d'employes = " << retour_nb_employes << endl << endl;
 //boucle permettant d'afficher les noms d'employés ainsi que leur nombre d'heures de travail par semaine, taux horaire et salaire par semaines
 for(nb_lu=0;nb_lu<retour_nb_employes;nb_lu++){
  cout << nom_prenom[nb_lu] << ":"  << nb_heures[nb_lu] << " * $ "<< taux_horaire[nb_lu] << "= $" << nb_heures[nb_lu]*taux_horaire[nb_lu] << endl;
 }
}

2 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
21 nov. 2006 à 09:20
dans tes fonctions il faut passer les paramètres par  pointeur ou par réléférence. Ici c'est normal que tes données reprennent leur valeurs à la sortie de la fonction. Si tu mets le code de ta fonction dans main tu verras que tes valeurs seront bien lues.

int lireinfo(char nom_prenom[max_employes][30], int nb_heures[max_employes], float taux_horaire[max_employes], char nom_fichier[40])
doit devenir par exemple
int lireinfo( char* nom_prenom, int max_employes,int max_nom, int* nb_heures,float* taux_horaires, char* nom_fichier) -
louis14
0
martram Messages postés 17 Date d'inscription vendredi 13 octobre 2006 Statut Membre Dernière intervention 2 décembre 2007
21 nov. 2006 à 17:08
j'ai trouvé la solution.. mon trableau de charactère nom_prenom n'était pas assez grand, ce qui provoquait une erreur de fonctionnement..il mettait tous les noms dans la premiere cellule plutôt que d'en mettre un seul..puis tout les noms moins le premier pour la 2ième cellule, ainsi de suite..
j'ai du mal à expliquer le pouquoi encore...mais si je met nom_prenom[max_employes][32] plutôt que nom_prenom[max_employes][30] ça fonctionne à merveille la ligne à saisir contenant exactement 30 caractères(+1 à l'arrêt)

alors merci d'avoir essayé
0
Rejoignez-nous