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* ...
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?