Je suis nb, et je comprend pas ça : - C++ - Programmation
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.
Marsh Posté le 09-10-2004 à 13:38:34
utilise 
 
string nom; 
 
cin >> nom; // un mot 
getline(cin, nom); // une ligne 
cout << nom;
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à..  juste pour reécrire ce que j'ai marqué on est obligé de faire toutes ces lignes de codes ?
  juste pour reécrire ce que j'ai marqué on est obligé de faire toutes ces lignes de codes ?   
   
  
 
en faite je comprend pas tres bien ce que fais le getline   
   
 
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é. 
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   
   quelqu'un sait ?
  quelqu'un sait ?   
 
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 
 
 
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 !   
   
  
 
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 ?
  peut etre que c'est pas une bonne solution d'utiliser le "if (cin >> nbr)" dans ce cas la ?   
  
 
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
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
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 !   | 
 
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
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.   | 
 
 
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...
( 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à   
   
    
  
 
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  
 
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  | 
 
 
 
http://www.cplusplus.com/ref/iostream/
Marsh Posté le 09-10-2004 à 18:04:10
ReplyMarsh 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)
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
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. 
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
Marsh Posté le 09-10-2004 à 13:31:15
voilà le code :
 
 
 c'est impossible de stocker des espaces dans une varaible ou quoi ? je comprend plus
  c'est impossible de stocker des espaces dans une varaible ou quoi ? je comprend plus   
   
 
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