Problème de boucle infinie.
clemou01
-
Doctor C Messages postés 648 Statut Membre -
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...
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...
A voir également:
- Problème de boucle infinie.
- Code gta 5 ps3 vie infinie - Guide
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lecture en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Huawei s'allume et s'éteint en boucle - Forum Huawei
4 réponses
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
Echo "Lima Mike Alfa";
Tu n'as qu'à faire un
if(n > 1 && n < 3){
printf("c'est un nombre entre un et trois");
}
Echo "Lima Mike Alfa";
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);
scanf("%d", &choixRace);
do
{
printf("\nSaisie incorrecte, veuillez ressaisir une valeur\n\n");
}
while(choixRace<1 && choixRace>3 || scanf("%d", &choixRace) != 1);
#include <stdlib.h>
#include <stdio.h>
// Après tes scanf ... utilise fflush(stdin)
scanf(....);
fflush(stdin);
#include <stdio.h>
// Après tes scanf ... utilise fflush(stdin)
scanf(....);
fflush(stdin);
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.
Et concernant le fflush et les entrées, tu peux te référer ici: https://c.developpez.com/faq/?page=Les-entrees-sorties
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