Partage
  • Partager sur Facebook
  • Partager sur Twitter

manipulation de fichier

fichier

    20 août 2019 à 21:13:23

    bonsoir 

    je rencontre un problème dans cet exercice

    voici le code

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    int main(){
    int i;
    ifstream fichier("C:/Users/UTILISATEUR/Desktop/Desk/mes revisions mapcom C/entrer/plaqueIn.txt");
        if (fichier){
            string line;
    	while(getline(fichier,line)!=NULL){
                for (i=0;i<line.size();i++){
    	        getline(fichier,line);
                    //conversion de string en char
                    char const *cs;
    		cs=line.c_str();
    	        if((cs[0]==cs[6] && cs[1]==cs[7]) || (cs[0]==cs[7] && cs[1]==cs[8]) || (cs[0]==cs[8] && cs[1]==cs[9])){
    	            cout<<"funny plate\n";
    	         }
    	         else{
    	            cout<<"not a funny plate\n";
    	         }
          	     }	
    	}
        }
        else{
            cout<<"Erreur"<<endl;
    	return -1;
        }
        return 0;
       }


    A noter qu'il s'agit d'un fichier d'entrée pour les données d'entrées.

    Vos différentes aides seront les bienvenues☺

    -
    Edité par GerardYahouedehou 20 août 2019 à 21:17:19

    • Partager sur Facebook
    • Partager sur Twitter
      21 août 2019 à 9:10:57

      Salut,

      Quel est ton problème ?

      -
      Edité par Raynobrak 21 août 2019 à 9:11:18

      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2019 à 15:14:25

        En plus d'expliquer le problème

        • ce qu'on voudrait que ça fasse
        • ce que ça fait en réalité,

        Il faudrait indenter ça correctement, parce que là, ça ne donne pas envie de lire. D'une part il faut respecter le lecteur, surtout quand on veut qu'il donne un coup  de main, d'autre part ça te servira à pour écrire/corriger ton programme, ce qui risque d'arriver souvent. Faut se respecter soi-même.

        -
        Edité par michelbillaud 27 août 2019 à 22:47:19

        • Partager sur Facebook
        • Partager sur Twitter
          22 août 2019 à 15:04:51

          Merci pour vos suggestions. Le problème consiste à déterminer si une plaque du Burkina est "funny" ou pas. Une plaque "funny" signifie qu'elle peut contenir les inscriptions selon les cas suivants:(par exemple)  11 WH 1157 BF     ou     52 HB 3528 BF     ou     36 NU 1436 BF. C'est à dire que les chiffres du bloque n°1 doivent forcement apparaître dans ceux du bloque n°3 (comme mentionné à travers les caractères en gras). Les premier et troisième bloques sont constitués respectivement de deux et de quatre chiffres. Les deuxième et quatrième bloques sont constitués respectivement de deux lettres majuscules au hasard et de deux lettres BF. A noter que BF symbolise le Burkina Faso et doit être présent pour tous les numéros de plaque.

          Il faut noter qu'il s'agit à mon avis des trois cas possibles pour que les plaques soient dites "funny". A part ces trois cas, les autres plaques seront dites "not a funny".

          Pour l'entrée des données de vérification du programme, il y a un fichier texte comme vous pourrez le constater dès la ligne 7. Ce fichier contient des lignes comportant les numéros de plaque (chaque ligne contient un seul numéro de plaque). De votre côté, vous pourrez essayer d'en créer un.

          Le gros problème réside au niveau de la sortie des résultats. La console me présente que des not a funny plate. Ce qui voudrait dire que l'instruction de la ligne 16 a la ligne 18 n'est pas exécutée.

          Concernant le problème d'indentation souligné par michelbillaud, j'ai essayé de la faire lors de la copie du code, mais sans succès.

          -
          Edité par GerardYahouedehou 22 août 2019 à 15:15:15

          • Partager sur Facebook
          • Partager sur Twitter
            26 août 2019 à 20:22:06

            Pour quelle plaque *précisement* la condition est elle fausse alors qu'elle devrait être vraie ?

            -
            Edité par michelbillaud 26 août 2019 à 20:24:15

            • Partager sur Facebook
            • Partager sur Twitter
              27 août 2019 à 15:36:43

              Toutes les plaques qui doivent être vraies sont fausses
              • Partager sur Facebook
              • Partager sur Twitter
                27 août 2019 à 22:47:56

                Choisis-en une.

                Ps : as tu tenu compte des espaces dans la numérotation des caractères? 

                -
                Edité par michelbillaud 27 août 2019 à 22:51:55

                • Partager sur Facebook
                • Partager sur Twitter
                  28 août 2019 à 15:28:25

                  36 HG 8365 BF

                  Oui j'en ai tenu compte

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 août 2019 à 22:05:25

                    GerardYahouedehou a écrit:

                    36 HG 8365 BF

                    Oui j'en ai tenu compte


                    0         1
                    012345678901234567
                    36 HG 8365 BF

                    ta formule détecte  qu'il y a le même chiffre (3) en position 0 et 7 ?

                    EDIT

                    Apparemment oui. Pour en être sûr il faut rendre le code un peu lisible.

                      if( (cs[0]==cs[6] && cs[1]==cs[7]) 
                       || (cs[0]==cs[7] && cs[1]==cs[8])
                       || (cs[0]==cs[8] && cs[1]==cs[9])){
                                      cout<<"funny plate\n";
                                 }

                    Chez moi, ceci fonctionne

                    include <iostream>
                    
                    void testFunny(const std::string &cs) {
                      std::cout << cs << " is ";
                      if ((cs[0] == cs[6] && cs[1] == cs[7]) ||
                          (cs[0] == cs[7] && cs[1] == cs[8]) ||
                          (cs[0] == cs[8] && cs[1] == cs[9])) {
                        std::cout << "funny";
                      } else {
                        std::cout << "not funny";
                      }
                      std::cout << std::endl;
                    }
                    
                    int main() {
                      testFunny("36 HG 8365 BF");
                      std::cout << "ok" << std::endl;
                      return 0;
                    }

                    Inutile de se compliquer à passer par un c_str().

                    Le problème serait plutôt du côté de la lecture : faire afficher systématiquement les données lues.


                    => il y a deux boulces imbriquées avec des getline. Tu trouves ça normal ? :-)



                    -
                    Edité par michelbillaud 29 août 2019 à 13:34:13

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 août 2019 à 20:48:13

                      Ok, c'est compris. Merci pour votre aide 

                      • Partager sur Facebook
                      • Partager sur Twitter

                      manipulation de fichier

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown