Bonjour les amis . J'ai un petit soucis , vous m'enverrez ravi si vous m'aider à le resoudre . Dans le programme si dessous , je veux pas qu'autre valeur que 1 et 2 soit valable pour "mode" mais quand je mets des valeurs flottantes(comme 1.5 ou 2.8) , ça les accepte
et si jamais je mets un caractere comme un point par exemple , ça entre dans une boucle infinie . J'aimerais comprendre svp aidez moi . Merci beaucoup !
<pre class="brush: cpp;">
#include <stdio.h>
#include <stdlib.h>
int main()
{
int mode = 0 ;
do
{
printf(" Mode 1 ou 2 ? \n");
scanf("%d",&mode);
}
while(mode!=1 && mode!=2);
printf( " Super" \n);
return 0 ;
}
</pre>
- Edité par AbdoulwadoudTidjani 8 juin 2023 à 19:55:19
Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
Manque de Politesse
Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?
C'est dû au fonctionnement de scanf(). Si tu mets 1.3, comme tu as donné le format pour un entier, scanf() lit le 1, et ensuite rejette le '.' . C'est donc la valeur 1 qui est assignée à mode. Mais si tu n'entres qu'un point ('.'), scanf() le refuse et le '.' reste dans le buffer clavier, mode reste à 0, le test est faux, on revient à scanf() qui lit le '.', le refuse, etc.... d'où la boucle infinie.
Dans un premier temps, tant que tu n'auras pas suivi un tutoriel pour faire des entrées protégées des bêtises de l'utilisateur (fgets() associé à sscanf() par exemple), entre des valeurs correctes.
- Edité par edgarjacobs 8 juin 2023 à 19:57:53
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Une solution possible et pas trop compliquée, mais incomplète je crois, c'est d'exploiter la valeur de retour de 'scanf' : c'est le nombre d'arguments que 'scanf' a réussi à lire correctement.
Exemple :
int nb = scanf("%d",&mode); // nb = nbre d'arguments que 'scanf' a réussi à lire
if (nb != 1) // c'est qu'il y a eu un problème...
mode = 1; // dans ce cas on met une valeur par défaut
if ((mode != 1) && (mode != 2)) // l'utilisateur a rentré une mauvaise valeur
mode = 1; // là encore on force la valeur par défaut
Je crois qu'il faut ensuite vider le tampon pour être sûr qu'il ne reste pas un caractère qui n'aurait pas été lu. Pour ça on appelle cette fonction :
void viderTampon()
{
int c = 0;
while (c != '\n' && c != EOF)
c = getchar();
}
- Edité par robun 8 juin 2023 à 22:44:40
Problème de boucle infinie
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent