Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme Récupération Saisi

Quoi Utiliser?

    25 mai 2008 à 21:05:37

    J'aimerai pouvoir récupérer un texte saisi par l'utilisateur assez long de 300 caractères par exemple seulement en essayant avec :
    cin.getline(phrase,900);
    

    ou:
    getline(cin,phrase);
    


    je ne peut rentrer que 28 caractères sous peine d'avoir un joli message d'erreur windows ! o_O

    Auriez vous une solution? :D

    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2008 à 21:10:08

      Corrige l'erreur qui se trouve avant.
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        25 mai 2008 à 21:12:02

        mon code complet :
        #include <iostream>
        using namespace std;
        
        void menu();
        void coder(char phrase[]);
        string remplace(char entrer[]);
        string transforme(char entrer[]);
        void crypter();
        void decrypter();
        void decoder(char phrase[]);
        
        int main()
        {
            int re;
            do{
        int rep=1;
            string reponse;
        menu();
        cout<<"Crypter ou Decrypter ?\n";
        do{
        cin>>reponse;
        cin.sync();
        
        if (reponse=="Crypter")
           crypter();
        else if(reponse=="Decrypter")
           decrypter();
        else
        {
          cout<<"retapez s'il vous plait:\n";
          rep=99;
        }
        }while(rep==99);
        
        char choix;
        
        cout<<"Revenir au menu o/n ?\n";
        cin>>choix;
        cin.sync();
        if(choix=='o')
            re=99;
            else
            re=0;
            }while(re==99);
        return 0;
        }
        
        void coder(char phrase[])
        {
        
        cout<<remplace(phrase)<<"\n";
        }
        
        void decoder(char phrase[])
        {
        
        cout<<transforme(phrase)<<"\n";
        }
        
        string remplace(char entrer[])
         {
         char sortie[sizeof(entrer)];
        
         for(int i=0 ; i <= strlen(entrer) ; i++)
         {
        
        if((int(entrer[i]))>=97&&(int(entrer[i]))<=123)
        {
            if(i<=13)
         entrer[i]=((int(entrer[i])-71-(i*2))%26)+97;
        
        else if(i<=26)
         entrer[i]=((int(entrer[i])-45-(i*2))%26)+97;
        
        else if(i<=39)
         entrer[i]=((int(entrer[i])-19-(i*2))%26)+97;
        
        
        
        }
         sortie[i] = entrer[i];
         }
        
         return sortie;
         }
        
         string transforme(char entrer[])
         {
         char sortie[sizeof(entrer)];
        
         for(int i=0 ; i <= strlen(entrer) ; i++)
         {
        
        if((int(entrer[i]))>=97&&(int(entrer[i]))<=123)
        {
            if(i<=13)
         entrer[i]=((int(entrer[i])-97+(i*2))%26)+97;
        
        else if(i<=26)
         entrer[i]=((int(entrer[i])-123+(i*2))%26)+97;
        
        else if(i<=39)
         entrer[i]=((int(entrer[i])-146+(i*2))%26)+97;
        
        
        
        }
        
         sortie[i] = entrer[i];
         }
        
         return sortie;
         }
        
         void menu()
         {
        cout<<"                          ||||||||||||||||||||||||||\n";
        cout<<"                          |||||||||CRYPTEUR|||||||||\n";
        cout<<"                          ||||||||||||||||||||||||||\n\n";
         }
        
        
        void crypter ()
        {char phrase[901];
            cout<<"Phrase a coder:  \n";
        
        cin.getline(phrase,900);
        
        
            cout<<"phrase codee:\n";
        coder(phrase);
        }
        
        void decrypter()
        {char phrase[901];
           cout<<"Phrase a decoder :\n";
         cin.getline(phrase,900);
        
        decoder(phrase);
        
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          25 mai 2008 à 21:48:37

          Avec strlen(), tu oublies le 0-terminal.
          Oublie le C, passes tout en C++
          Et au fait, pourquoi cette obfuscation à coup de nombre magiques dans tous les sens?

          EDIT: s/pour/pourquoi/
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            27 mai 2008 à 2:34:59

            Citation : lmghs

            Avec strlen(), tu oublies le 0-terminal.
            Oublie le C, passes tout en C++
            Et pour cette obfuscation à coup de nombre magiques dans tous les sens?



            Pardon mais ce code est déja en C++ :p

            Je pense avoir trouvé une solution a ton prblème ^^ . Tu devrais utuliser la librairie <String> comme dans les tutos de C++ je crois que sa pourrait déguguer ton code.

            Autre suggestion remplace ton «cin.getline(phrase,900);»

            par un «cin >> VersUnString;»

            J'espère t'avoir apporter de l'aide ;)
            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2008 à 3:12:21

              Citation : killerinstinc

              Citation : lmghs

              Avec strlen(), tu oublies le 0-terminal.
              Oublie le C, passes tout en C++
              Et pour cette obfuscation à coup de nombre magiques dans tous les sens?



              Pardon mais ce code est déja en C++ :p


              Avec des char[] ... bof.

              Citation : killerinstinc

              a- Je pense avoir trouvé une solution a ton problème ^^ . Tu devrais utuliser la librairie <String> comme dans les tutos de C++ je crois que sa pourrait déguguer ton code.

              b- Autre suggestion remplace ton «cin.getline(phrase,900);»
              par un «cin >> VersUnString;»


              a- Ben ouais, c'est ce que j'appelle C++.
              Accessoirement, <String> n'est pas une bibliothèque (==library, et encore moins une librairie). En revanche, <string> (tout en minuscules) est un fichier d'en-tête de la bibliothèque dite "bibliothèque standard du C++" (SL / std).

              b- Nope. Cela ne résout pas son problème de 0-terminal suite à une mauvaise utilisation de choses directement héritées du C. Enfin, l'éloigner des char[] au profit de std::string est une bonne chose, mais la fonction à utiliser est std::getline() (et non pas std::istream::getline() qu'il a effectivement utilisée). L'opérateur d'extraction (operator>>()) réalise tout autre chose qui ne répond pas à son besoin.
              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

              Probleme Récupération Saisi

              × 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