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

  FORUM HardWare.fr
  Programmation
  C++

  Je suis nb, et je comprend pas ça :

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Je suis nb, et je comprend pas ça :

n°868974
Profil sup​primé
Posté le 09-10-2004 à 13:31:15  answer
 

voilà le code :
 
int main()
{
  char mot[5];
  cout << "tape un mot \n" ;
  cin >> mot;
  cout << mot;
  return 0;
}
 
Dans ce programme j'initialise la variable mot avec 5 caracteres maximum non ? Alors je comprend pas pourquoi quand j'entre une valeur comme bonjour qui a 7 caractere sa m'affiche bonjour !!! Sa devrait m'afficher bonjo car seulement 5 caracteres sont stocké dans la variable mot.
 
aidez moi a comprendre ça pliiz :)
 
Une autre chose si j'entre le mot "bon jour" là sa m'affiche plus rien du tout  :sweat:  c'est impossible de stocker des espaces dans une varaible ou quoi ? je comprend plus  :sweat:  :sweat:

mood
Publicité
Posté le 09-10-2004 à 13:31:15  profilanswer
 

n°868976
smaragdus
whores, drugs & J.S. Bach
Posté le 09-10-2004 à 13:33:49  profilanswer
 

C'est à toi de vérifier que l'entrée au clavier est inférieur à 5 lettres, pas au compilateur. Qui plus est, ton code doit planter en dehors du mode debug.

n°868978
Taz
bisounours-codeur
Posté le 09-10-2004 à 13:38:34  profilanswer
 

utilise
 
string nom;
 
cin >> nom; // un mot
getline(cin, nom); // une ligne
cout << nom;

n°869013
Profil sup​primé
Posté le 09-10-2004 à 14:26:53  answer
 


j'ai utilisé ça  
 
int main()
{
 
  string mot;
  cout << "tape une phrase \n" ;
  cin >> mot;
  getline(cin, mot);
  cout << mot;
  return 0;
}
 
 
et quand j'entre une phrase du genre "salut sa vas", sa vas me marquer "sa vas" et le salut il a disparu....
 
 
en bricolant pour que sa marche j'ai fais ça :
int main()
{
 
  string mot;
  cout << "tape une phrase \n" ;
  cin >> mot;
  cout << mot; // ligne que j'ai rajouté en bricolant
  getline(cin, mot);
  cout << mot;
  return 0;
}
 
mais c'est vraiment du bricolage là.. :cry:  juste pour reécrire ce que j'ai marqué on est obligé de faire toutes ces lignes de codes ?  :sweat:  :sweat:  
 
en faite je comprend pas tres bien ce que fais le getline  :sweat:  :sweat:

n°869015
bjone
Insert booze to continue
Posté le 09-10-2004 à 14:30:49  profilanswer
 

ce que Taz a marqué était une exemple.
 
cin >> nom;
pour juste un mot  
 
getline(cin,mot);
pour une ligne entière  
 
tu fais l'un ou l'autre. pas les deux sinon il arrive ce qu'il t'ait arrivé.

n°869020
Profil sup​primé
Posté le 09-10-2004 à 14:36:03  answer
 

ah ok merciiiiii beaucoup ! sa fonctionne !!!!!!!

n°869045
Profil sup​primé
Posté le 09-10-2004 à 15:25:56  answer
 

désolé d'etre si nb, mais j'ai un autre petit probleme, je sais pas comment il faut faire pour savoir si une variable de type int contient vraiment des chiffres :
 
je propose ça :
 
int main ()
{
int nbr ;
cin >> nbr;
  if (nbr >99999999999 || nbr <-9999999999)
  {
  cout << "ce que tu as tapé n'est pas un nombre";
  }
}
 
mais sa fait tres brouillon non ? et puis si je tape 999999999999999999999999 sa vas me dire que c'est pas un nombre donc c'est pas génial génial, il doit y avoire une fonction qui determine si une variable contient des chiffres ou des caracteres mais j'arrive pas a trouver  :sweat:  :sweat:  quelqu'un sait ?  :love:

n°869048
Taz
bisounours-codeur
Posté le 09-10-2004 à 15:30:21  profilanswer
 

un int ne peux contenir qu'un int. si tu veux savoir si la saisie a bien fonctionner
 
 
if(cin >> nbr) // alors c'est ok
 
 

n°869073
Profil sup​primé
Posté le 09-10-2004 à 15:57:56  answer
 

ah oué d'accord je connaissais pas cette astuce !
 
par contre sa semble ne pas tres bien fonctionner :
 
 
 
int main()
{
  int nbr ;
  cout <<"tape un nombre";
  if (cin >> nbr)
  {
  cout << "bravo tu as tapé un nombre" ;
  }
  else
  {
  cout << "Non tu n'a pas tapé de nombre";
  }
 
  getchar()  ;  // pour faire la pause
 
  return 0;
}
 
dans ce programme quand je met un chiffre au pif sa me dit "bravo tu as tapé un nombre", puis sa attends que je tape sur une touche pour que le programme s'arrete.
 
par contre si je tape "gffsd" par exemple, sa me  dit "non tu n'a pas tapé de nombre" et paf le programme s'arrete directement et ne prend pas en compte le getchar () !!! on a presque pas le temps de voire le message !  :sweat:  :cry:  
 
j'arrive pas a comprendre sniif  :??:  peut etre que c'est pas une bonne solution d'utiliser le "if (cin >> nbr)" dans ce cas la ?  :??:  
 

n°869074
Taz
bisounours-codeur
Posté le 09-10-2004 à 15:59:47  profilanswer
 

cout <<"tape un nombre";
  if (cin >> nbr)  
 
 
->
  cout <<"tape un nombre" << flush;
  if (cin >> nbr)
 
edit: j'ai fais ma part de babysitting, si tu veux en savoir plus, tu fais une recherche, j'ai montré des centaines de fois comment lire proprement un entier


Message édité par Taz le 09-10-2004 à 16:00:52
mood
Publicité
Posté le 09-10-2004 à 15:59:47  profilanswer
 

n°869075
cris56
Posté le 09-10-2004 à 16:01:58  profilanswer
 

et pis c'est pas une solution de programmer à l'aveuglette comme ca
 
 
le c++ c'est pas cin, cout et plein d'astuces

n°869093
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 16:42:20  profilanswer
 

Citation :

par contre si je tape "gffsd" par exemple, sa me  dit "non tu n'a pas tapé de nombre" et paf le programme s'arrete directement et ne prend pas en compte le getchar () !!! on a presque pas le temps de voire le message !  :sweat:  :cry:  


Quand le cin >> nbr réussit, il est réalisé jusqu'au bout donc le flot cin est vidé, donc il ne reste plus rien.
 
Quand cin >> nbr plante (parce que tu n'y as pas mis des nombres), il reste des trucs dans cin (tout ce qui n'a pas pu être balancé dans nbr en fait), or getchar utilise également cin (il retire le premier caractère présent dans cin) donc tout ce qui reste dans cin fait qu'on passe directement getchar


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°869128
Profil sup​primé
Posté le 09-10-2004 à 17:55:44  answer
 

Citation :

Quand le cin >> nbr réussit, il est réalisé jusqu'au bout donc le flot cin est vidé, donc il ne reste plus rien.  
 
Quand cin >> nbr plante (parce que tu n'y as pas mis des nombres), il reste des trucs dans cin (tout ce qui n'a pas pu être balancé dans nbr en fait), or getchar utilise également cin (il retire le premier caractère présent dans cin) donc tout ce qui reste dans cin fait qu'on passe directement getchar


 
ah oué d'accord !! je comprend mieux ! bcp mieux !
par contre j'ai essayé d'utiliser le flush , sa marche pas non plus, j'ai parcouru d'autre forum apparement je suis pas le seul :'(
 
 
j'ai fais  :
{  
  int nbr ;  
  cout <<"tape un nombre"<<flush; //rajout du flush
  if (cin >> nbr)  
  {  
  cout << "bravo tu as tapé un nombre" ;  
  }  
  else  
  {  
  cout << "Non tu n'a pas tapé de nombre";  
  }  
 
  getchar()  ;  // pour faire la pause  
 
  return 0;  
}  
 
sa marche pas, d'ailleur je voie pas l'utilité de mettre un flush ici, donc j'ai testé de le mettre ailleurs comme ça :  
 
 
{  
  int nbr ;  
  cout <<"tape un nombre";  
  if (cin >> nbr)  
  {  
  cout << "bravo tu as tapé un nombre" ;  
  }  
  else  
  {  
  cout << "Non tu n'a pas tapé de nombre" <<flush; // j'en ai mis 1 la.
  }  
 
  getchar ()  ;  // pour faire la pause  
 
  return 0;  
}  
 
sa marche pas non plus... j'ai essayé d'en mettre partout, mais rien n'a faire... si nbr n'est pas un nombre sa quitte direct le programme :'(( sauf bien sure si je met plein de getchar () pour recuperer 1 a 1 chaque caractere de la variable nbr...  
 
je suis un peu bloqué là  :sweat:  :sweat:   :cry:  
 
et j'ai chercher sur ce forum aussi j'ai meme trouver de la part de taz qui disait a un autre desespéré :
 

Citation :

"fais une recherche sur comment on lit proprement un entier, j'ai déjà collé des exemples de codes comme il faut."


 
ouinnn :sweat:

n°869130
cris56
Posté le 09-10-2004 à 17:57:57  profilanswer
 

cris56 a écrit :

et pis c'est pas une solution de programmer à l'aveuglette comme ca
 
 
le c++ c'est pas cin, cout et plein d'astuces


 
 
http://www.cplusplus.com/ref/iostream/

n°869137
Taz
bisounours-codeur
Posté le 09-10-2004 à 18:04:10  profilanswer
 
n°869994
madprog
Posté le 11-10-2004 à 13:10:19  profilanswer
 

j'avais entendu parler d'une fonction cin.ignore(); pour vider le cin... mais je connais pas les arguments et j'ai la flemme de chercher la :)
 
alors tente un coup de google...
 
mad:: prog (obligé de mettre un espace... @#! de smileys)

n°870083
Taz
bisounours-codeur
Posté le 11-10-2004 à 14:24:27  profilanswer
 

y en a marre, je m'ennuie à sortir l'exemple complet ... mais apparemment y en a qui savent vraiment pas lire. Continuer l'entraide inter-newbies et oubliez pas les cours du soir de lecture

n°870106
Lam's
Profil: bas.
Posté le 11-10-2004 à 14:32:29  profilanswer
 

Taz a écrit :

y en a marre, je m'ennuie à sortir l'exemple complet ... mais apparemment y en a qui savent vraiment pas lire. Continuer l'entraide inter-newbies et oubliez pas les cours du soir de lecture


Taz, pense à t'acheter un Grévisse ou un Bescherelle, parce que là, ça devient atroce.

n°870471
madprog
Posté le 11-10-2004 à 18:02:52  profilanswer
 

arf... j'étais pas allé voir le lien (en fait j'ai pas lu jusqu'en bas...)
Désolé, Taz
 
mad:: prog


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

  Je suis nb, et je comprend pas ça :

 

Sujets relatifs
[PHP] erreur que je ne comprend pasnotification d'erreur que je comprend pas
un bogue que je ne comprend pas SVP HELPcomprend pas : executer un truc.exe
Je comprend plus rien...[javascript] Qu'est-ce que ne comprend pas ie ? [resolu]
Validation de code HTML : comprend pas là...connection a MSSQL, ok mais comprend pas ?
problème access comprend pas[PHP] alors la je comprend pas
Plus de sujets relatifs à : Je suis nb, et je comprend pas ça :


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