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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°39997
Rasta@Icam
Houston, I've got a problem...
Posté le 15-06-2001 à 11:54:01  profilanswer
 

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
mood
Publicité
Posté le 15-06-2001 à 11:54:01  profilanswer
 

n°40000
minusplus
Posté le 15-06-2001 à 11:57:29  profilanswer
 

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;

n°40001
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 11:58:41  profilanswer
 

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

n°40002
levioloneu​x
Posté le 15-06-2001 à 11:58:44  profilanswer
 

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

n°40008
Rasta@Icam
Houston, I&#039;ve got a problem...
Posté le 15-06-2001 à 12:06:47  profilanswer
 

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
n°40016
minusplus
Posté le 15-06-2001 à 12:21:31  profilanswer
 

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

n°40021
Rasta@Icam
Houston, I&#039;ve got a problem...
Posté le 15-06-2001 à 12:30:20  profilanswer
 

"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
n°40026
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 12:35:37  profilanswer
 

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...)

n°40027
minusplus
Posté le 15-06-2001 à 12:39:56  profilanswer
 

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

n°40029
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 12:44:48  profilanswer
 

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

mood
Publicité
Posté le 15-06-2001 à 12:44:48  profilanswer
 

n°40030
minusplus
Posté le 15-06-2001 à 12:47:49  profilanswer
 

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 !)

n°40032
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 12:50:09  profilanswer
 

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.

n°40033
minusplus
Posté le 15-06-2001 à 12:53:23  profilanswer
 

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

n°40035
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 12:54:15  profilanswer
 

:lol:

n°40036
Rasta@Icam
Houston, I&#039;ve got a problem...
Posté le 15-06-2001 à 12:57:48  profilanswer
 

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
n°40037
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 13:00:03  profilanswer
 

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;


 
:)

n°40041
Rasta@Icam
Houston, I&#039;ve got a problem...
Posté le 15-06-2001 à 13:13:19  profilanswer
 

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
n°40052
minusplus
Posté le 15-06-2001 à 13:48:25  profilanswer
 

on est sérieux nous ?
 
 
 
 
 
 
:lol:

n°40056
Guz
Posté le 15-06-2001 à 14:01:36  profilanswer
 

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.

n°40069
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 14:29:12  profilanswer
 

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

n°40116
minusplus
Posté le 15-06-2001 à 15:34:10  profilanswer
 

cout << flush;
 
manipulateur !

n°40119
minusplus
Posté le 15-06-2001 à 15:35:53  profilanswer
 

euh pardon ! cin >> flush;

n°40139
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:04:52  profilanswer
 

nan ca marche pas cin >> flush
deja essaye

n°40142
BENB
100% Lux.
Posté le 15-06-2001 à 16:13:08  profilanswer
 

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

n°40148
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:21:00  profilanswer
 

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++ :)

n°40150
BENB
100% Lux.
Posté le 15-06-2001 à 16:23:12  profilanswer
 

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

n°40156
gilou2
Posté le 15-06-2001 à 16:29:53  profilanswer
 

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


---------------
Développeur de FreeVCR : http://freevcr.ifrance.com [:gilou2]
n°40159
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 16:33:42  profilanswer
 

gilou2 a écrit a écrit :

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




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

n°40185
minusplus
Posté le 15-06-2001 à 17:16:15  profilanswer
 

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=

n°40192
janoscoder
Posté le 15-06-2001 à 17:31:08  profilanswer
 

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!

n°40195
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 17:35:46  profilanswer
 

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

n°40197
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 17:37:59  profilanswer
 

: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

n°40203
janoscoder
Posté le 15-06-2001 à 18:07:27  profilanswer
 

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?

n°40205
tgrx
My heart is pumping for love
Posté le 15-06-2001 à 18:10:59  profilanswer
 

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]

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Comment faire un sondage simple ?simple question ..........ASP..........
C++, prog Win32, question simple de débutant ![javascript] tres tres simple !
[javascript] un truc simple...[C++] J'y comprends plus rien !
PHP et Expressions régulières : un pb tout simple.question simple HTML !
[C/C++] Faire un jeux simple ?Petit probleme Simple en C
Plus de sujets relatifs à : [C++] Ca doit être simple mais je comprends pas...


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