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
Bonjour,

j'ai un petit souci avec mon code

// Programme exercice en c++   

#include <stdio.h>   
#include <conio.h>   
#include <stdlib.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 ("%c", &rep);     
  }while((rep =! 'O') && (rep != 'N'));   
 }   
 s = cumul/nbr;   
 printf ("votre moyenne est de %f", s);   
     
 getch ();   
 return 0;   
    
}   



Ma seconde boucle ne marche pas ! en faite quand je débogue avec mon ide (eclipse) le second scanf ::> scanf ("%c", &rep); n'attend pas ma saisie. il continue, et reprend la première boucle ou je dois rentrer une autre note !

merci d'avance pour vos solutions :)


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
Il faut vider le buffer, avec cin.sync(); (je suis plus sur que ce soit cette fonction.)
0
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
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 ?
0
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
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
0
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
merci pour ta réponse mais je n'y arrive toujours pas

j'ai fais

do {
			printf ("saisissez une note (entre 0 et 20) ");
			fflush(stdin);
			scanf ("%d", &note);
		}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 )
0

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
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).
0
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
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 !
0
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
strcmp = string compare
0
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
j'ai fais

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
0
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
#include <string.h>
0
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
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 :(
0
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
ecris "o" et pas 'o' et remplacer %c par %s
0
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
#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?
0
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
oui, met char rep[2];
0
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
// 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
0
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
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";
0