Problème de boucle c++
Fermé
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
-
Modifié par hadeesse le 5/03/2013 à 12:13
armasousou Messages postés 1270 Date d'inscription dimanche 16 août 2009 Statut Membre Dernière intervention 30 décembre 2016 - 5 mars 2013 à 15:24
armasousou Messages postés 1270 Date d'inscription dimanche 16 août 2009 Statut Membre Dernière intervention 30 décembre 2016 - 5 mars 2013 à 15:24
15 réponses
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 12:15
5 mars 2013 à 12:15
Il faut vider le buffer, avec cin.sync(); (je suis plus sur que ce soit cette fonction.)
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
5 mars 2013 à 12:19
5 mars 2013 à 12:19
merci pour ta réponse mais je suis en 1ere année de bts info, je débute et pour moi vider le buffer c'est du chinois :D. En gros la cellule en mémoire qui mémorise la variable rep doit être effacé avant le second scanf ? Mais par défaut quand il y a une saisie ça n'écrase pas de base les données de la cellule ?
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 12:40
5 mars 2013 à 12:40
en gros, t'as un circuit electrique qui enregistre le resultat (je parle pas de la valeur de retour) de scanf, quand tu tape un nombre, ca marche bien, sauf que tu tape ton nombre, le buffer l'envoi dans ta valeur, mais le "entré" que tu lance reste dans le buffer, et quand tu refais scanf, il chope le entré direct ^^
Par contre, tu fais du c, pas vraiment du c++, utilise fflush(stdin); pour vider le buffer
Par contre, tu fais du c, pas vraiment du c++, utilise fflush(stdin); pour vider le buffer
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
5 mars 2013 à 12:49
5 mars 2013 à 12:49
merci pour ta réponse mais je n'y arrive toujours pas
j'ai fais
je peux toujours pas saisir mon deuxième scanf (mais je sais pas trop ou placer la fonction donc j'ai fait ça au feeling xD )
j'ai fais
do { printf ("saisissez une note (entre 0 et 20) "); fflush(stdin); scanf ("%d", ¬e); }while (note>20 || note<0); nbr = nbr + 1; cumul = cumul + note; do { printf ("voulez vous continuer (O/N) ? "); fflush(stdin); scanf ("%c", &rep); }while((rep =! 'O') && (rep != 'N')); }
je peux toujours pas saisir mon deuxième scanf (mais je sais pas trop ou placer la fonction donc j'ai fait ça au feeling xD )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 13:01
5 mars 2013 à 13:01
c'est bien placé, mais la condition de ton while ne marchera pas ^^
déja, je suis pas sur que "=!" existe, mais != oui, et pour comparer des chaines de caracteres en C, utilise strcmp(chaine1, chaine2).
déja, je suis pas sur que "=!" existe, mais != oui, et pour comparer des chaines de caracteres en C, utilise strcmp(chaine1, chaine2).
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
5 mars 2013 à 13:18
5 mars 2013 à 13:18
Lol c'est ce "=!" qui m'a foutu dans la merde :D
Sinon ça marche toujours pas mais je vais creuser pour bien comprendre la fonction strcmp (que je ne connaissais même pas de nom !)
merci pour ton aide !
Sinon ça marche toujours pas mais je vais creuser pour bien comprendre la fonction strcmp (que je ne connaissais même pas de nom !)
merci pour ton aide !
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 13:28
5 mars 2013 à 13:28
strcmp = string compare
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
Modifié par hadeesse le 5/03/2013 à 13:44
Modifié par hadeesse le 5/03/2013 à 13:44
j'ai fais
mais l'ide me dit que strcmp n'est pas déclaré ! il faut que je le déclare avant le main ? Sinon la syntaxe au niveau de l'utilisation de la fonction est bonne ? :D
do { printf ("voulez vous continuer (O/N) ? "); fflush(stdin); scanf ("%c", &rep); }while((strcmp(rep, 'O')!=1) && (strcmp(rep, 'N')!=1));
mais l'ide me dit que strcmp n'est pas déclaré ! il faut que je le déclare avant le main ? Sinon la syntaxe au niveau de l'utilisation de la fonction est bonne ? :D
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 13:44
5 mars 2013 à 13:44
#include <string.h>
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
Modifié par hadeesse le 5/03/2013 à 13:49
Modifié par hadeesse le 5/03/2013 à 13:49
j'ai ajouté l'include mais j'ai des soucies de conversion entre char et const char*. Il faut que je crée des constantes 'O' et 'N' ? et que je change char en char* ?
ca marche pas :(
ca marche pas :(
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
Modifié par armasousou le 5/03/2013 à 13:51
Modifié par armasousou le 5/03/2013 à 13:51
ecris "o" et pas 'o' et remplacer %c par %s
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
5 mars 2013 à 13:55
5 mars 2013 à 13:55
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main () {
int nbr, note, cumul;
float s;
char rep;
rep = 'O';
nbr = 0;
cumul = 0;
while ((rep = 'O')) {
do {
printf ("saisissez une note (entre 0 et 20) ");
scanf ("%d", ¬e);
}while (note>20 || note<0);
nbr = nbr + 1;
cumul = cumul + note;
do {
printf ("voulez vous continuer (O/N) ? ");
scanf ("%s", &rep);
}while((strcmp(rep, "O")!=1) && (strcmp(rep, "N")!=1));
}
s = cumul/nbr;
printf ("votre moyenne est de %f", s);
getch ();
return 0;
}
Il faut que je change la déclartion de variable char non?
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main () {
int nbr, note, cumul;
float s;
char rep;
rep = 'O';
nbr = 0;
cumul = 0;
while ((rep = 'O')) {
do {
printf ("saisissez une note (entre 0 et 20) ");
scanf ("%d", ¬e);
}while (note>20 || note<0);
nbr = nbr + 1;
cumul = cumul + note;
do {
printf ("voulez vous continuer (O/N) ? ");
scanf ("%s", &rep);
}while((strcmp(rep, "O")!=1) && (strcmp(rep, "N")!=1));
}
s = cumul/nbr;
printf ("votre moyenne est de %f", s);
getch ();
return 0;
}
Il faut que je change la déclartion de variable char non?
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 13:57
5 mars 2013 à 13:57
oui, met char rep[2];
hadeesse
Messages postés
8
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
5 mars 2013
Modifié par hadeesse le 5/03/2013 à 14:02
Modifié par hadeesse le 5/03/2013 à 14:02
// Programme exercice en c++ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main () { int nbr, note, cumul; float s; char rep[2]; rep = "O"; nbr = 0; cumul = 0; while ((rep = "O")) { do { printf ("saisissez une note (entre 0 et 20) "); scanf ("%d", ¬e); }while (note>20 || note<0); nbr = nbr + 1; cumul = cumul + note; do { printf ("voulez vous continuer (O/N) ? "); scanf ("%s", &rep); }while((strcmp(rep, "O")!=1) && (strcmp(rep, "N")!=1)); } s = cumul/nbr; printf ("votre moyenne est de %f", s); getch (); return 0; }
au niveau de l'initialisation de rep l'ide me met invalid array assignment
et pour le %s il me dit format '%s' expects type 'char*', but argument 2 has type 'char (*)[2]' je comprends pas pourquoi il voit char(*)[2] ...
et pourquoi tu mets [2] et pas [1] il n'y a qu'une lettre non ?
Sinon la fonction strcmp a l'air de marcher
merci pour ton aide dans tous les cas ça m'a déjà bien avancé ! si tu veux lâcher l'affaire pas de soucie :D
armasousou
Messages postés
1270
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
5 mars 2013 à 15:24
5 mars 2013 à 15:24
En fait, je sais pas comment on compare juste un caractere, pour ça que je te demande de passer par des chaines de caracteres, qui fonctionne bien avec strcmp ^^
et ton premier whle manque un strcmp
Créer ton rep comme ça :
char* rep = "O";
et ton premier whle manque un strcmp
Créer ton rep comme ça :
char* rep = "O";