Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1380 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comment saisir un message sur plusieurs lignes?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment saisir un message sur plusieurs lignes?

n°563127
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 13:03:04  profilanswer
 

Bonjour,
J'ai fait la fonction suivante qui permet de saisir un message sur plusieurs lignes:
 

string saisie_message()
{
 char ligne[LMAX];
 string message;
 cout<<"Message: (terminer par une ligne avec un point)"<<endl;
 while(1)
   {
   cin.getline(ligne,LMAX);
   if(strcmp(ligne,"." )!=0)
     {
    message+=ligne;
     message+="\n";
      }
   else break;
   }
 return message;
}


 
Avec cette fonction, l'utilisateur doit terminer son message un saisissant un unique point sur une ligne.
Au lieu de ça, je voudrais qu'il fasse Ctrl-D quand il a terminé. Comment faire?
 :hello:  

mood
Publicité
Posté le 10-11-2003 à 13:03:04  profilanswer
 

n°563151
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-11-2003 à 13:35:55  profilanswer
 

CTRL-D = 0x04 en ASCII


---------------
J'ai un string dans l'array (Paris Hilton)
n°563156
lorill
Posté le 10-11-2003 à 13:39:18  profilanswer
 

Harkonnen a écrit :

CTRL-D = 0x04 en ASCII


faut utiliser les signaux :o

n°563158
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-11-2003 à 13:42:16  profilanswer
 

lorill a écrit :


faut utiliser les signaux :o


laisse le d'abord faire du vrai C++ au lieu d'un hybride batard (cf le strcmp() au lieu de string.compare() ), après tu lui causeras signaux :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°563159
chrisbk
-
Posté le 10-11-2003 à 13:43:11  profilanswer
 

bah ligne etant un char (necessaire pour le getLine), finalement, bon, pkoi pas ?

n°563160
lorill
Posté le 10-11-2003 à 13:43:12  profilanswer
 

Harkonnen a écrit :


laisse le d'abord faire du vrai C++ au lieu d'un hybride batard (cf le strcmp() au lieu de string.compare() ), après tu lui causeras signaux :D


j'ai pas lu le code :o

n°563161
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 13:44:12  profilanswer
 

D'accord mais je ne vois pas comment faire pour que la saisie soit stoppée quand on fait Ctrl-D.

n°563163
lorill
Posté le 10-11-2003 à 13:44:31  profilanswer
 

man signal :o

n°563192
ffluff
Challenge Everything
Posté le 10-11-2003 à 14:12:44  profilanswer
 

heffer a écrit :


string saisie_message()
{
 char ligne[LMAX];
 string message;
 cout<<"Message: (terminer par une ligne avec un point)"<<endl;
 while(1)
   {
   cin.getline(ligne,LMAX);
   if(strcmp(ligne,"." )!=0)
     {
    message+=ligne;
     message+="\n";
      }
   else break;
   }
 return message;
}




 
C'est quand même magnifique que la fonction retourne un(e :P) string et que dans la fonction on a un joulie magnifique char* ...


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°563197
SoWhatIn22
Posté le 10-11-2003 à 14:15:56  profilanswer
 


Dans le mesure du possible, utiliser sigaction plutôt que signal.
 
Ceci étant, le C^d génère quel signal? Il me semblait que sous unix (et donc pas sous windows), la séquence C^d envoie un 'eof' sur l'entrée standard reliée au terminal. De quel signal s'agit-il?

mood
Publicité
Posté le 10-11-2003 à 14:15:56  profilanswer
 

n°563273
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 15:53:06  profilanswer
 

fFluFf a écrit :


 
C'est quand même magnifique que la fonction retourne un(e :P) string et que dans la fonction on a un joulie magnifique char* ...


 
Je ne comprends pas. C'est pas correct ce que j'ai fait?

n°563279
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-11-2003 à 16:06:38  profilanswer
 

heffer a écrit :


 
Je ne comprends pas. C'est pas correct ce que j'ai fait?


ben disons que tu mélanges un peu C et C++ dans le meme programme...


---------------
J'ai un string dans l'array (Paris Hilton)
n°563288
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 16:29:19  profilanswer
 

Harkonnen a écrit :


ben disons que tu mélanges un peu C et C++ dans le meme programme...


 
Mais la fonction getline prend un char* en paramètre donc je n'ai pas le choix. Si?

n°563339
SoWhatIn22
Posté le 10-11-2003 à 17:46:43  profilanswer
 

heffer a écrit :


 
Mais la fonction getline prend un char* en paramètre donc je n'ai pas le choix. Si?


si.

Code :
  1. string in;
  2. getline(cin,in);

n°563347
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 18:24:38  profilanswer
 

sowhatin22 a écrit :


si.

Code :
  1. string in;
  2. getline(cin,in);




 
Mais fallait le dire plus tôt!  :)  
Donc est-ce que ça vous plaît mieux comme ça:

Code :
  1. string saisie_message()
  2. {
  3. string message, ligne;
  4. cout<<"Message: (terminer par une ligne avec un point)"<<endl;
  5. while(1)
  6.   {
  7.   getline(cin,ligne);
  8.   if(ligne!="." )
  9.    message+=ligne+"\n";
  10.   else break;
  11.   }
  12. return message;
  13. }


Message édité par heffer le 10-11-2003 à 18:29:10
n°563362
SoWhatIn22
Posté le 10-11-2003 à 18:55:13  profilanswer
 

heffer a écrit :


 
Mais fallait le dire plus tôt!  :)  
Donc est-ce que ça vous plaît mieux comme ça:

Code :
  1. string saisie_message()
  2. {
  3. string message, ligne;
  4. cout<<"Message: (terminer par une ligne avec un point)"<<endl;
  5. while(1)
  6.   {
  7.   getline(cin,ligne);
  8.   if(ligne!="." )
  9.    message+=ligne+"\n";
  10.   else break;
  11.   }
  12. return message;
  13. }




 
ne fonctionne pas. Si tu rentre "blabla.", alors la comparaison de chaine ne fonctionne pas. Il faut faire une recherche dans la chaine.
- soit tu utilises les fonctions de recherche dans les std::string (find_first_of, notamment) pour chercher le caractère voulu. Attention alors de ne concaténer que la sous partie voulue si le caracère '.' est trouvé.
 
- soit tu utilises directement cin.get(). Dans ce cas, tu lis les caractères 1 par 1, auquel cas le test est plus facile.


Message édité par SoWhatIn22 le 10-11-2003 à 18:55:45
n°563363
chrisbk
-
Posté le 10-11-2003 à 18:55:52  profilanswer
 

ouais enfin fo lire ce qu'il veut faire aussi hein ? :O
 
"terminer par une ligne avec un point"

n°563368
heffer
PDG du Site des Mains
Posté le 10-11-2003 à 19:06:55  profilanswer
 

chrisbk a écrit :

ouais enfin fo lire ce qu'il veut faire aussi hein ? :O
 
"terminer par une ligne avec un point"


 
Heureusement que t'es là pour me comprendre!  :jap:

n°564637
Dag elg
Posté le 11-11-2003 à 23:59:30  profilanswer
 

Code :
  1. #include <string>
  2. #include <vector>
  3. using namespace std;
  4. int main(){
  5. string line;
  6. vector<string> text;
  7. cout<<"entrer votre texte :\n";
  8. while(getline(cin,line)) text.push_back(line);
  9. cout<<"Texte :\n";
  10. for(int i=0;i<text.size();i++) cout<<text[i]<<endl;
  11. }


le getline dans un while permet d'arreter la saisie avec crtl-D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comment saisir un message sur plusieurs lignes?

 

Sujets relatifs
Code sur plusieurs lignes...[C++] Prog qui doit afficher sur 20 lignes successives un mess....
[Forum] récuperer les retours de lignes des champsvider 1 seule ligne d'un tres gros formulaire contenant X lignes?
ca veut quoi ce message d'erreur ???Connection à plusieurs tables avec un datagrid
[Tableau] autoajustement et lignes de séparations invisibles[Java] Plusieurs versions de JVM installées : problème
[HTML/Php] Formulaires en plusieurs parties? 
Plus de sujets relatifs à : Comment saisir un message sur plusieurs lignes?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR