[C++] Ca doit être simple mais je comprends pas...

Ca doit être simple mais je comprends pas... [C++] - Programmation

Marsh Posté le 15-06-2001 à 11:54:01    

Bon, voilà, j'ai trouvé un tutorial et il y a un exemple de code permettant de demander son nom à la personne puis de lui dire bonjour "machin".
Quand je le compile :
 
char mybuffer [100];
  cout << "What's your name? ";
  cin.getline (mybuffer,100);
  cout << "Hello " << mybuffer << ".\n";
 
il n'y a pas de problème, par contre quand j'essaye de faire la même chose dans mon programme :
 
char nom [100];
       cout << "Quel est votre nom? ";
       cin.getline (nom,100);
       cout << "\nBonjour " <<nom ;
       cout << '\n';
       cout << "Entrez une valeur entiere : ";
       cin >> a;
       cout << "Vous avez tape" << " " <<a;
 
il ne "s'arrête pas" et passe directement à "Entrez une valeur entière". (Et il affiche simplement "Bonjour" )
 
Voilà, désolé de vous déranger avec qqch d'aussi simple mais là je bloque franchement.


---------------
Rejoignez la seule, l'unique The Vatican Team
Reply

Marsh Posté le 15-06-2001 à 11:54:01   

Reply

Marsh Posté le 15-06-2001 à 11:57:29    

ton code s'écrit :
char nom [100];
       cout << "Quel est votre nom? ";
       cin.getline (nom,100);
       cout << endl << "Bonjour " <<nom << endl;
       cout << "Entrez une valeur entiere : ";
       cin >> a;
       cout << endl << "Vous avez tape" << " " <<a;

Reply

Marsh Posté le 15-06-2001 à 11:58:41    

T'es sur qu'il n'y a pas d'autres instructions qui precedent ton bout de code ??
A mon avis il doit rester du dechet dans cin, et donc le programme passe a travers le getline

Reply

Marsh Posté le 15-06-2001 à 11:58:44    

à la 5ème ligne de ton prog essaye de mettre des cotes doubles:
"\n"

Reply

Marsh Posté le 15-06-2001 à 12:06:47    

J'ai essayé pour les double quotes mais c pas ça...
Par contre tgrx, avant j'ai ça :
 
  cout << "Que voulez vous utiliser?\n";
  cout << "1) Le formateur de disque dur\n";
  cout << "2) Le test a la con\n";
  cout << "Tapez le nombre correspondant a votre choix : ";
  cin >> x;
  switch (x)
 
puis ensuite les différents cases. Le bout de code précédent correspond au tout début du case 2.
 
Il faut donc que je remmette qqch à 0 avant le cin.getline????
 
PS: Vous inquiétez pas "formateur de dd", c juste un compte à rebours, je suis pas un ptit H4ckerz Rebelz ;)

 

[edit]--Message édité par Rasta@Icam--[/edit]


---------------
Rejoignez la seule, l'unique The Vatican Team
Reply

Marsh Posté le 15-06-2001 à 12:21:31    

si tu decide de faire du C++ autant en utiliser tous les atouts -> les manipulateurs sont là pour ça !

Reply

Marsh Posté le 15-06-2001 à 12:30:20    

"manipulateur"??????
tu sais je commence juste à m'y mettre avec le tutorial de cplusplus.com et le peu que j'ai fait, c'était du TurboPascal + "application des algorithmes vu en cours" qu'autre chose...
alors quand tu me parles de "manipulateur"..


---------------
Rejoignez la seule, l'unique The Vatican Team
Reply

Marsh Posté le 15-06-2001 à 12:35:37    

Le probleme vient du fait qu'il reste un '\n' dans cin (qui provient de ta premiere entree, tu rentres un nombre puis entree, le nombre est stocke mais il reste '\n' dans cin).
 
Donc lorsque tu fais ton getline, le '\n' est considere comme une fin de ligne et ton programme continue.
Pour supprimer ce caractere genant, tu peux rajouter un  
cin.get()  
juste avant la ligne  
cout << "Quel est votre nom ?", et le programme va fonctionner.
 
Par contre, je ne sais pas comment "vider" le flux d'entree (par que faire un cin.get() c'est pas tres propre...)

Reply

Marsh Posté le 15-06-2001 à 12:39:56    

RASTA > je parle du endl à introduir dans ton flux.

Reply

Marsh Posté le 15-06-2001 à 12:44:48    

Oui endl c'est plus propre que '\n'... meme si sur 99.999% des systemes c'est la meme chose.
 
D'ailleurs je viens d'aller faire un tour dans iostream.h pour jeter un oeil a getline, et voila ce que j'ai trouve :
 
class istream
{
...
  istream& getline(char* ptr, int len, char delim = '\n');      
};
 
Sacrilege, ils utilisent '\n'... :D

Reply

Marsh Posté le 15-06-2001 à 12:44:48   

Reply

Marsh Posté le 15-06-2001 à 12:47:49    

ben ouais mais là, c'est normal : c'est une fonction qui sera donc facilement surghargeable si le système de base change et en plus c'est un prarmètre par défaut ! (faut bien qu'à un moment, on retombe sur le système actuel, malgré l'introduction d'un max d'abstraction !)

Reply

Marsh Posté le 15-06-2001 à 12:50:09    

Quitte a rester dans l'abstrait, ils auraient pu definir qq chose comme ca :
 
#define ENDL_CHAR '\n'
et le mettre comme parametre par defaut dans leurs fonctions.

Reply

Marsh Posté le 15-06-2001 à 12:53:23    

même le plus roots des hacker a quelque fois envie d'envoyer tout ballader pour aller jouer à Mario Bros. sur sa nintendo ! :D

Reply

Marsh Posté le 15-06-2001 à 12:54:15    

:lol:

Reply

Marsh Posté le 15-06-2001 à 12:57:48    

C dingue quand vous parlez entre vous, g bo lire plusieurs fois, c vachement dur à comprendre, m'enfin bon, c'est le debut :)
Sinon merci tgrx, ca marche nickel le cin.get()
 
Par contre, vous me dites que endl vaut mieux que \n, c pkoi, problème dans certains compilateurs ou sous certains OS?? :??:


---------------
Rejoignez la seule, l'unique The Vatican Team
Reply

Marsh Posté le 15-06-2001 à 13:00:03    

Non c'est juste qu'il se peut que sous certains environnements, le caractere '\n' ne soit pas compris comme une fin de ligne...  Et puis ce caractere est herite du C, avec printf et compagnie.
 
Juste pour dire que

Code :
  1. printf("\n" );


s'ecrit en C++

Code :
  1. cout << endl;


 
:)

Reply

Marsh Posté le 15-06-2001 à 13:13:19    

Ok et bien merci bcp à vous tous!
Je vais laisser retomber ce petit topic et laisser travailler les personnes sérieuses. ;)


---------------
Rejoignez la seule, l'unique The Vatican Team
Reply

Marsh Posté le 15-06-2001 à 13:48:25    

on est sérieux nous ?
 
 
 
 
 
 
:lol:

Reply

Marsh Posté le 15-06-2001 à 14:01:36    

C super simple, avant de faire un cin il faut vider le buffer du clavier par un fflush(stdin).
voila c tout.
Donc rajoute : fflush( stdin );
 
Guz.

Reply

Marsh Posté le 15-06-2001 à 14:29:12    

Guz> oui mais ca c'est du C. On cherche la meme chose en C++.

Reply

Marsh Posté le 15-06-2001 à 15:34:10    

cout << flush;
 
manipulateur !

Reply

Marsh Posté le 15-06-2001 à 15:35:53    

euh pardon ! cin >> flush;

Reply

Marsh Posté le 15-06-2001 à 16:04:52    

nan ca marche pas cin >> flush
deja essaye

Reply

Marsh Posté le 15-06-2001 à 16:13:08    

tgrx a écrit a écrit :

Guz> oui mais ca c'est du C. On cherche la meme chose en C++.




Et pourquoi ne pas le faire en C ?
enfin moi je suis allergiques aux flux, et je prefere le printf... mais chacun ses gouts...

Reply

Marsh Posté le 15-06-2001 à 16:21:00    

PASKE ! KANTON FE DU C++, ON FE PA DU C !! :gun:
 
Disons que je suis devenu maniaque, et je refuse d'inclure les .h du C (comme stdio, stdlib, ...). Il faut donc trouver des solutions de remplacements en C++ :)

Reply

Marsh Posté le 15-06-2001 à 16:23:12    

tgrx a écrit a écrit :

PASKE ! KANTON FE DU C++, ON FE PA DU C !! :gun:
 
Disons que je suis devenu maniaque, et je refuse d'inclure les .h du C (comme stdio, stdlib, ...). Il faut donc trouver des solutions de remplacements en C++ :)




Moi je n'ai pas peur de dire que je fais du C/C++ :D

Reply

Marsh Posté le 15-06-2001 à 16:29:53    

non c'est cin.flush() :lol:


---------------
Développeur de FreeVCR : http://freevcr.ifrance.com [:gilou2]
Reply

Marsh Posté le 15-06-2001 à 16:33:42    

gilou2 a écrit a écrit :

non c'est cin.flush() :lol:




 
:sarcastic: et la marmotte... flush ca n'existe QUE pour les ostream...

Reply

Marsh Posté le 15-06-2001 à 17:16:15    

bon j'ai essayé
cin << flush;
cin >> flush;
cin <> flush;
cin == flush;
cin -> flush;
cin %  flush;
cin +  flush;
flush + cin; (bah koi ?)
pow(cin, flush);
 
ben ça veut pas !
 
 
 
 
 
a ouais, c'est vrai ! http://forum.hardware.fr/sqlforum/ [...] interface=

Reply

Marsh Posté le 15-06-2001 à 17:31:08    

C'est du délire votre truc. On ne flush pas un flux d'entrée: quand on utilise une fonction qui damande des données, on regarde dans le buffer si elle y sont. Et si y'a un buffer intermédiaire, on y regarde aussi. Si y'a pas de données dispo, on les attend (fc bloquante) ou non (pas bloquante).
Quand tu vas chier, comme tu tires la chasse pour évacuer tes merdes.
Quand tu vas boire dans un verre, tu prends l'eau qu'il y a, et tu ne le verses pas.
 
non mais!

Reply

Marsh Posté le 15-06-2001 à 17:35:46    

janoscoder> ben regarde l'exemple du haut, et ose dire que c'est pas casse couilles de vider le '\n' entre les deux instructions...

Reply

Marsh Posté le 15-06-2001 à 17:37:59    

:D
 
et puis pour reprendre ton image, quand y a que des dechets au fond de ton verre, et bien tu le nettoie avant de boire dedans :p

Reply

Marsh Posté le 15-06-2001 à 18:07:27    

ouaip, mais si tu le flushes, tu perds aussi ce qu'il y a dedans. C'est casse couilles, mais il faut choisir ce qu'on flush.
Ce que je voulais dire, c'est que les fonctions de sortie peuvent retourner avant que la sortie soit faite. En revance, les fonctions d'entrée ont bien fait une entrée avant de retourner, donc le concept du flush n'est pas.
 
De toute manière, il faut écrite la fonction
string getlinestring(istream & in);
qui fait tout ce que l'on veut et adieu le char *.
D'ailleurs, y'a pas un moyen de choisir le délimiteur pour
in>>string?

Reply

Marsh Posté le 15-06-2001 à 18:10:59    

a ma connaissance non, mais tu peux toujours faire un getline :
void getline(istream& in, string s, char delim='\n');

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed