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 ?
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 ?
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 ?
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...
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 :
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 c'est impossible de stocker des espaces dans une varaible ou quoi ? je comprend plus