Comment saisir un message sur plusieurs lignes? - C++ - Programmation
Marsh Posté le 10-11-2003 à 13:35:55
CTRL-D = 0x04 en ASCII
Marsh Posté le 10-11-2003 à 13:39:18
ReplyMarsh Posté le 10-11-2003 à 13:42:16
| lorill 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 
Marsh Posté le 10-11-2003 à 13:43:11
bah ligne etant un char (necessaire pour le getLine), finalement, bon, pkoi pas ?
Marsh Posté le 10-11-2003 à 13:43:12
| Harkonnen a écrit :   | 
 
j'ai pas lu le code  
 
Marsh Posté le 10-11-2003 à 13:44:12
D'accord mais je ne vois pas comment faire pour que la saisie soit stoppée quand on fait Ctrl-D.
Marsh Posté le 10-11-2003 à 14:12:44
| heffer a écrit :   
   | 
 
 
C'est quand même magnifique que la fonction retourne un(e  ) string et que dans la fonction on a un joulie magnifique char* ...
) string et que dans la fonction on a un joulie magnifique char* ...
Marsh Posté le 10-11-2003 à 14:15:56
| lorill a écrit : man signal  | 
 
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?
Marsh Posté le 10-11-2003 à 15:53:06
| fFluFf a écrit :   | 
 
 
Je ne comprends pas. C'est pas correct ce que j'ai fait?
Marsh Posté le 10-11-2003 à 16:06:38
| heffer a écrit :   | 
 
ben disons que tu mélanges un peu C et C++ dans le meme programme...
Marsh Posté le 10-11-2003 à 16:29:19
| Harkonnen a écrit :   | 
 
 
Mais la fonction getline prend un char* en paramètre donc je n'ai pas le choix. Si?
Marsh Posté le 10-11-2003 à 17:46:43
| heffer a écrit :   | 
 
si. 
| Code : 
 | 
Marsh Posté le 10-11-2003 à 18:24:38
| sowhatin22 a écrit :   
   | 
 
 
Mais fallait le dire plus tôt!   
  
Donc est-ce que ça vous plaît mieux comme ça: 
| Code : 
 | 
Marsh Posté le 10-11-2003 à 18:55:13
| heffer a écrit :   
   | 
 
 
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.
Marsh Posté le 10-11-2003 à 18:55:52
ouais enfin fo lire ce qu'il veut faire aussi hein ?  
 
 
"terminer par une ligne avec un point"
Marsh Posté le 10-11-2003 à 19:06:55
| chrisbk a écrit : ouais enfin fo lire ce qu'il veut faire aussi hein ?  | 
 
 
Heureusement que t'es là pour me comprendre!   
 
Marsh Posté le 11-11-2003 à 23:59:30
| Code : 
 | 
 
le getline dans un while permet d'arreter la saisie avec crtl-D
Marsh Posté le 10-11-2003 à 13:03:04
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?