IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

probleme de boucle avec fonction et appel


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut probleme de boucle avec fonction et appel
    Bonsoir

    J'ai un gros problème avec mon compilateur c++ et le code suivant

    Quand je fais veux faire marché mon programme il refuse et me dit que la valeur renvoyé par la fonction calcul code est une variable que j'assigne à une constante . Ce qui est archi faut car j'affecte ma valeur une variable.

    Second problème quand je lance mon programme et qu'il veut bien marcher , je saisi un nouveau client puis calcul le code et paf le programme s'arrête comme si que j'étais à la fin , hors ce n'est pas ce que je veux le programme doit continuer de tourner.

    Mes clients saisi ne sont pas rangés dans le fichier , ils disparaissent je ne sais ou ?


    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    void Nouveau_Client ( char *nom_du_fichier  , int &pass )
    { 
        int const taille=7;
     
        char transit[taille];
        struct client cli;
     
    	pass=pass+1;
     
        ofstream fich_cli(nom_du_fichier);
     
        cout<<"Vous etes sur la page pour saisir un nouveau client . \n";
        cout<<"Saisir le nom de votre client : \n";
        cin>>cli.nom ;
        cout<<" \n";
        fich_cli<<cli.nom ; 
     
     
        cout<<"Saisir le prenom de votre client : \n";
        cin>>cli.prenom  ;
        cout<<" \n";
        fich_cli<<cli.prenom;
     
        cout<<"Saisir l'age de votre client : \n";
        cin>>cli.age;
        cout<<" \n";
        fich_cli<<cli.age;
     
        cout<<"Saisir le montant des achats du client : \n";
        cin>>cli.montant;
        cout<<" \n";
        fich_cli<<cli.montant;
     
        cout<<"Saisir la date du jour : \n";
        cout<<"Le jour : \n";
        cin>>cli.d.jour;
        cout<<" \n";
        fich_cli<<cli.d.jour;
        cout<<"Le mois : \n";
        cin>>cli.d.mois;
        cout<<" \n";
        fich_cli<<cli.d.mois;
        cout<<"L'année : \n";
        cin>>cli.d.annee;
        cout<<" \n";
        fich_cli<<cli.d.annee;
     
    	cout<<endl;
        fich_cli.close();
     
       cout<<"Le code du client : \n";
    	transit[taille]=Calcule_Code ( nom_du_fichier , pass );
    	strcpy (cli.code,transit);
    	cout<<" \n"; 
        fich_cli<<cli.code; 
     
     
     
    } // fin du sous-programme Nouveau_Client 
     
    char Calcule_Code ( char *nom_du_fichier , int pass) 
    {
     
        const int taille=7 ;
        char chaine_code[taille];
        char chaine_code_sdept[taille] ;
        char chaine_code_tout[taille];
        char ech[taille];
        char ech2[taille];
        char ech3[taille];
     
        itoa (pass,chaine_code,10);  // converti un nombre en chaine
     
        if ( chaine_code[1]=='\0' && chaine_code[2]=='\0')
        {
              ech[0]=chaine_code[0] ;
              chaine_code[0]=chaine_code[2] ;
              chaine_code[2]=ech[0] ;
        }
        else 
        {
        if (chaine_code[2]=='\0')
        {
           ech2[0]=chaine_code[2] ;
           chaine_code[2]=chaine_code[1] ;
           ech3[0]=chaine_code[0] ;
           chaine_code[0]=ech2[0] ;
           chaine_code[1]=ech3[0] ;
        }
        }
     
        cout<<"Si c'est un femme mettre F , si c'est un homme mettre H .\n";
        cout<<"Pour taper l'information faire comme suis : FXX ou HXX. Ou xx designe le departement . Taper la lettre puis le departement en chiffre .\n";                          
        cout<<"Si le departement n'a qu'un seul chiffre , mettre un 0 en premier , puis le chiffre , exemple : 01 , 02 ,03 … .\n";
        cout<<"Si le departement est inconnu, mettre NC au lieu du numeros de departement .\n";
        cout<<" \n";
     
        cin>>chaine_code_sdept ;
     
        strcpy ( chaine_code_tout, chaine_code) ;
        strcat ( chaine_code_tout , chaine_code_sdept) ; 
     
    	return chaine_code_tout;
     
    } // fin du sous programme Code_Client

    Merci beaucoup d'avance

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    il est de bon aloi d'uliser std::string et std::vector en c++ plutot que des tableaux foireux.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Il y a plusieurs soucis de base, je sais pas si c'est ça qui crée le problème mais ce sera déjà pas mal de les corriger

    D'abord la fonction char Calcule_Code ( char *nom_du_fichier , int pass) est censée retourner un char mais elle retourne un char*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char chaine_code_tout[taille];
    [...]
    return chaine_code_tout;
    Je pense que le but est de retourner un char* (un string en fait )

    Ensuite deuxième problème, et c'est ça qui fait planter ton programme je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transit[taille]=Calcule_Code ( nom_du_fichier , pass );
    transit est un tableau de taille "taille" dont la première "case" est transit[0]
    Donc quand tu essayes d'écrire dans transit[taille] tu essaye d'écrire à un endroit non alloué ou en tout cas pas prévu pour.

    Pour terminer, j'imagine que Calcule_Code est censé retourné un char* donc tu devrait plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transit=Calcule_Code ( nom_du_fichier , pass );
    Maintenant ça fait un bon moment que j'ai pas manipuler les tableaux de char donc c'est possible que la syntaxe ne soit pas tout à fait bonne mais je pense que l'idée y est.

    Bon courage

Discussions similaires

  1. probleme de boucle avec condition
    Par Kam0uloX dans le forum VBScript
    Réponses: 0
    Dernier message: 08/02/2011, 02h33
  2. Boucle avec fonction
    Par croset dans le forum R
    Réponses: 4
    Dernier message: 14/06/2010, 21h59
  3. Probleme de filtre avec fonction Dlookup sur champ texte
    Par Piloupilou999 dans le forum Access
    Réponses: 5
    Dernier message: 27/01/2007, 23h41
  4. probleme de boucle avec mysql_fecth_object
    Par griese dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2006, 12h07
  5. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo