Je suis nb, et je comprend pas ça :

Je suis nb, et je comprend pas ça : - C++ - Programmation

Marsh Posté le 09-10-2004 à 13:31:15    

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:

Reply

Marsh Posté le 09-10-2004 à 13:31:15   

Reply

Marsh Posté le 09-10-2004 à 13:33:49    

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.

Reply

Marsh Posté le 09-10-2004 à 13:38:34    

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

Reply

Marsh Posté le 09-10-2004 à 14:26:53    


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:

Reply

Marsh Posté le 09-10-2004 à 14:30:49    

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

Reply

Marsh Posté le 09-10-2004 à 14:36:03    

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

Reply

Marsh Posté le 09-10-2004 à 15:25:56    

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:

Reply

Marsh Posté le 09-10-2004 à 15:30:21    

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
 
 

Reply

Marsh Posté le 09-10-2004 à 15:57:56    

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 ?  :??:  
 

Reply

Marsh Posté le 09-10-2004 à 15:59:47    

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
Reply

Marsh Posté le 09-10-2004 à 15:59:47   

Reply

Marsh Posté le 09-10-2004 à 16:01:58    

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

Reply

Marsh Posté le 09-10-2004 à 16:42:20    

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
Reply

Marsh Posté le 09-10-2004 à 17:55:44    

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:

Reply

Marsh Posté le 09-10-2004 à 17:57:57    

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/

Reply

Marsh Posté le 09-10-2004 à 18:04:10    

Reply

Marsh Posté le 11-10-2004 à 13:10:19    

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)

Reply

Marsh Posté le 11-10-2004 à 14:24:27    

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

Reply

Marsh Posté le 11-10-2004 à 14:32:29    

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.

Reply

Marsh Posté le 11-10-2004 à 18:02:52    

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

Reply

Sujets relatifs:

Leave a Replay

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