J'ai travaillé sur un programme qui nécessite des entrées entières, mais chaque fois qu'un nombre entier est accidentellement saisi, la fonction scanf cesse de fonctionner ou reste coincée dans une boucle.en utilisant scanf pour entrer uniquement des entiers?
Voici un exemple de ce que j'ai essayé de faire:
int n;
printf("please enter 0 or 1\n");
top:
scanf("%i",&n);
if(n == 0)
{
printf("you entered 0!\n");
}
if(n == 1)
{
printf("you entered 1!\n");
}
if(n != 0 && n != 1)
{
printf("please enter either 0 or 1.");
goto top;
}
Le troisième est si vous renvoie vers le haut si vous n'avez pas entré le bon numéro, mais cela ne fonctionne pas pour les lettres et d'autres caractères. Comment pouvez-vous le renvoyer en haut si une entrée non-entière est donnée?
Dodge en entrant avec '' fgets' et l'application sscanf' et vérifier sa valeur de retour (recherche la page man: quelle est la fonction return value de la famille 'scanf'?). Si vous n'obtenez pas ce que vous voulez, vider la chaîne d'entrée et en obtenir une autre. –
"Comment pouvez-vous le renvoyer en haut si une entrée non-entière est donnée?" -> lire le non-entier et le jeter d'abord. – chux
Vous devriez vérifier la valeur de retour de 'scanf()' pour reconnaître quand des erreurs se sont produites, telles que l'entrée n'étant pas numérique. Quand un tel échec de correspondance se produit, vous devez lire au moins un caractère de l'entrée standard - celui 'scanf()' est actuellement en train de s'étouffer - sinon il restera juste là pour causer des problèmes lors de la prochaine tentative. –