Problème de boucle infinie.

clemou01 -  
Doctor C Messages postés 648 Statut Membre -
Bonjour,

Je code actuellement en C et j'ai un petit souci. En fait je voudrais vérifier qu'une valeur (un int) entrée dans un scanf soit bien comprise entre 1 et 3. Si cette valeur est un nombre tout va bien. En revanche, si j'entre une lettre, j'ai une boucle infinie qui affiche le printf voulu...

4 réponses

Doctor C Messages postés 648 Statut Membre 399
 
Peux-tu montrer le code qui cause une boucle infinie car selon ce que tu nous, je ne vois pas où la boucle pourrais se trouver.

Tu n'as qu'à faire un

if(n > 1 && n < 3){ 
    printf("c'est un nombre entre un et trois"); 
}



Echo "Lima Mike Alfa";
0
clemou01
 
en fait comme je l'ai dit dans mon premier post, quand j'entre un nombre en dehors de 1,2 et 3, tout va bien. Mais c'est lorsque je rentre une lettre que la boucle est infinie.

scanf("%d", &choixRace);
do
{
printf("\nSaisie incorrecte, veuillez ressaisir une valeur\n\n");

}
while(choixRace<1 && choixRace>3 || scanf("%d", &choixRace) != 1);
0
Viking54
 
#include <stdlib.h>
#include <stdio.h>

// Après tes scanf ... utilise fflush(stdin)
scanf(....);
fflush(stdin);
0
Doctor C Messages postés 648 Statut Membre 399
 
Ta boucle infinie est due au fait que une fois que la réponse est fausse, tu boucles sans jamais permettre à l'utilisateur d'entrer une nouvelle réponse.

Tu devrais mettre le scanf dans ta boucle.

do 
{ 
  scanf("%d", &choixRace);
  if(choixRace==1) {
    //Effectuer un traitement
  }else if(choixRace==2){
    //Effectuer un traitement
  }else if(choixRace==3){
    //Effectuer un traitement
  } else {
    printf("\nSaisie incorrecte, veuillez ressaisir une valeur\n\n"); 
  }
}while(choixRace<1 || choixRace>3);


Et concernant le fflush et les entrées, tu peux te référer ici: https://c.developpez.com/faq/?page=Les-entrees-sorties
0