Résultats de 1 à 6 sur 6

Sujet : [Newbie] pb de comparaison de variable

  1. #1
    Visiteur MP
    Visiteur MP

    [Newbie] pb de comparaison de variable

    l utilisateur doit rentrer un numero et si ce numero existe deja on doit lui dire le pb c q ma fonction les compare bien mais le message avec cout ne s affiche
    A L\'aide
    voici ma fonction
    Code:
    void ajouterfic (tdatenum datenum, char nomfic [128]){
            int numero1,numero2;
          FILE*fic;
    
            fic=fopen(nomfic,\"ab\");
              if ((datenum.numero1 = numero1) &&(datenum.numero2= numero2)){
              cout<<\"numero deja existant\";
    
               }
               else {
               fwrite (&datenum, sizeof(tdatenum),1,fic);
               }
               fclose (fic);
     }
    Merci de m aider

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Salut,

    tu déclares numero1 et numero2 mais tu ne les intialises pas et tu n\'affectes rien non plus donc il peut y avoir tout et n\'importe quoi dans numero1 et numero2.

    Il faut si j\'ai bien suivi faire un fscanf ou fread ou fgets sur numero1 et numero2 pour leur donner la valeur désirée.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  3. #3
    Visiteur MP
    Visiteur MP
    je te remercie pour ton conseil mais la je suis vraiment pommer et si tu pouvait me montrer un exemple ca m arrangerai enormement

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Pour t\'aider, j\'aurrais besoin de plus d\'infos sur ce que tu veux faire et comment tu veux le faire et qu\'est ce qu\'il y a ou.

    Bon je suis allé voir Madame Soleil qui m\'a expliqué.

    Tu veux comparer datenum.numero1 = numero1
    avec si elle ne s\'est pas trompée numero1 écrit dans ton fichier.
    Don fais tout simplement apres fic=fopen(nomfic,\"ab\");

    fscanf(fic , \"%d\" , numero1);
    fscanf(fic , \"%d\" , numero2);

    S\'ils sont les deux à la suite.

    Ensuite il faut == au lieu de =.
    == test d\'égalité.
    = affectation.

    Dis moi si c\'est ca ou non.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

  5. #5
    Visiteur MP
    Visiteur MP
    je te remecie pour ton conseil je vais essayer avec fscanf
    je passe tout mon prog pour que tu comprenne mieux tu risque di trouver quelque erreur vu que tu a l air de ma i connaitre que moi
    si tu trouve une autre sol dit le moi merci
    Code:
    #include <stdio.h>
    #include <malloc.h>
    #include <iostream.h>
    #include <string.h>
    
    typedef struct tdatenum{
            int jour;
            int mois;
            int annee;
            int numero1;
            int numero2;
    }tdatenum;
    
    
    tdatenum creerdatenumero ( int jour, int mois, int annee, int numero1, int numero2 ){
             tdatenum ladate;
             ladate.jour=jour;
             ladate.mois=mois;
             ladate.annee=annee;
             ladate.numero1=numero1;
             ladate.numero2=numero2;
             return ladate;
    }
    
    tdatenum saisiedatenum (){
             tdatenum ladate;
             char rep;
              int numero1,numero2;
             cout<<\"entrez le jour\"<<\"\\n\";
             cin>> ladate.jour;
             cout<<\"entrez le mois\"<<\"\\n\";
             cin>> ladate.mois;
             cout<<\"entrez l annee\"<<\"\\n\";
             cin>> ladate.annee;
             cout<<\"entrez le numero avant le tiret \"<<\"\\n\" ;
             cin>>ladate.numero1;
             cout<<\"entrez le numero apres le tiret\"<<\"\\n\";
             cin>>ladate.numero2;
             cout<<\"voici les donnees que vous venez de rentrer\"<<\"\\n\";
             cout<<endl;
             printf(\"le numero de votre carte :%2.2d-%4.4d\",ladate.numero1,ladate.numero2);
             cout<<endl;
             printf (\"la date d expiration : %2.2d/%2.2d/%d\",ladate.jour,ladate.mois,ladate.annee);
             cout<<endl;
             cout<<\"les donnees sont t-elles correctes? O/N\"<<\"\\n\";
             cout<<endl;
             cout<<\"ATTENTION, si vous tapez o (oui) les donnees sont enregistrees,la fenetre se fermera automatiquement des que vous aurez tapez entree\"<<\"\\n\";
             cout<<endl;
             cout<<\"tapez votre reponse\"<<\"\\n\";
             cin>>rep;
             while (rep != \'o\' && rep != \'n\'){
             cout<<\"vous n avez pas tape sur la bonne lettre\"<<\"\\n\";
             cout<< \"retapez votre reponse\"<<\"\\n\";
             cin>>rep;
             }
             while ( rep != \'o\'){
    
             cout<<\"entrez le jour\"<<\"\\n\";
             cin>> ladate.jour;
             cout<<\"entrez le mois\"<<\"\\n\";
             cin>> ladate.mois;
             cout<<\"entrez l annee\"<<\"\\n\";
             cin>> ladate.annee;
             cout<<\"entrez le numero avant le tiret \"<<\"\\n\";
             cin>> ladate.numero1;
             cout<<\"entrez le numero apres le tiret \"<<\"\\n\";
             cin>> ladate.numero2;
             cout<<endl;
             cout<<\"voici la date dexpiration que vous avez rentrez\"<<ladate.jour<<\"/\"<<ladate.mois<<\"/\"<<ladate.annee<<\"\\n\";
             cout<<\"voici le numero de votre carte :\"<<ladate.numero1<<\"-\"<<ladate.numero2<<\"\\n\";
             cout<<\"les donnees sont t-elles correctes? O/N\"<<\"\\n\";
             cout<<\"ATTENTION, si vous tapez oui les donnees sont enregistrees et la fenetre se fermera automatiquement des que vous aurez tapez entree\"<<\"\\n\";
             cout<<\"tapez votre reponse\"<<\"\\n\";
             cin>>rep;
             while (rep != \'o\' && rep != \'n\'){
             cout<<\"vous n avez pas tape sur la bonne lettre\"<<\"\\n\";
             cout<< \"retapez votre reponse\"<<\"\\n\";
             cin>>rep;
             }
             }
             return ladate;
    
    
    }
    
    
    
    void afficher (tdatenum ladate){
         printf (\"la date d expiration : %2.2d/%2.2d/%d\",ladate.jour,ladate.mois,ladate.annee);
         cout<<endl;
         printf (\"le numero de carte : %2.2d-%4.4d\",ladate.numero1,ladate.numero2);
         cout<<endl;
    }
    
    void ajouterfic (tdatenum ladate, char nomfic [128]){
    
    
    
          FILE*fic;
    
    
            fic=fopen(nomfic,\"ab\");
    
              fwrite (&ladate, sizeof(tdatenum),1,fic);
    
    
               fclose (fic);
     }
    
    
    
    
    
    
    
    void afficherfic (char nomfic [128]){
         FILE*fic;
         tdatenum datetemp;
         fic=fopen(nomfic,\"rb\");
         fread (&datetemp, sizeof (tdatenum),1,fic);
         while (!feof (fic)){
               afficher (datetemp);
               fread (&datetemp,sizeof(tdatenum),1,fic);
         }
         fclose(fic);
    }
    /*void supprimerfic (int numero,  char nomfic [128]){
         tdatenum tabdate [100];
         int compt;
         int i;
         compt=0;
         FILE*fic;
         fic=fopen(nomfic, \"rb\");
         while(!feof(fic)){
              fread(&tabdate[compt],sizeof(tdatenum),1,fic);
              compt=compt+1;
              }
              fclose(fic);
              fic=fopen(nomfic,\"wb\");
              for(i=0;i<compt-1;i++){
                     if(((tabdate[i].numero)!= numero)){
                            fwrite(&tabdate[i],sizeof(tdatenum),1,fic);
                     }
                     fclose(fic);
              }
    } */
    
    
    void main (){
           int numero;
        ajouterfic(saisiedatenum(), (\"date.dat\"));
        afficherfic(\"date.dat\");
          cout<<endl;
      /* cout<<\"entrez le numero a supprimer\"<<\"\\n\";
          cin>>numero;
          cout<<endl;
          supprimerfic(numero,\"date.dat\");  */
          cout<<endl;
          cout<<\"tapez sur entree pour sortir\";
          getchar();       // permet de garder fenetre tant que l on n a pas
         }                 // appuyer sur une touche

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Ca a l\'air de marcher comme ca a premiere vue.

    C\'est pas void main mais int main
    et puis, si tu fais du C++, évite de faire printf, y a cout.
    Et tu peux aussi passer les fonctions comme afficher en tant que membre de la classe.

    Et d\'ailleurs, tu peux remplacer ta struct par une class.

    Tu fais du C ou du C++ ou les 2 a la fois ?

    Il vaut mieux choisir entre stdio (c) et iostream (c++), c\'est comme avoir des bretelles et une ceinture.


    de plus tu fais
    #include <malloc.h>
    #include <string.h>

    Et je ne vois pas de string ni de maloc donc tu peux les enlever, a part pour plus tard, mais pour l\'instant ils ne servent pas.
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé