La programmation en C - Boucle jusqu'à ce que les entrées de l'utilisateur numéro de scanf
J'ai besoin d'aide avec la vérification des erreurs pour mon programme. Je demande à l'utilisateur de saisir un entier et je voudrais vérifier si les utilisateurs d'entrée est un nombre entier. Sinon, répétez le scanf.
Mon code:
int main(void){
int number1, number2;
int sum;
//asks user for integers to add
printf("Please enter the first integer to add.");
scanf("%d",&number1);
printf("Please enter the second integer to add.");
scanf("%d",&number2);
//adds integers
sum = number1 + number2;
//prints sum
printf("Sum of %d and %d = %d \n",number1, number2, sum);
//checks if sum is divisable by 3
if(sum%3 == 0){
printf("The sum of these two integers is a multiple of 3!\n");
}else {
printf("The sum of these two integers is not a multiple of 3...\n");
}
return 0;
}
Lisez à propos de
stackoverflow.com/questions/14099473/...
Aussi, renseignez-vous sur scanf(3). Il revient sur le succès, le nombre de succès éléments numérisés!
Lire aussi à propos de
scanf() le type de retour peut être vérifiée. plz reportez-vous cela en détail
for, while
et do-while
boucle.stackoverflow.com/questions/14099473/...
Aussi, renseignez-vous sur scanf(3). Il revient sur le succès, le nombre de succès éléments numérisés!
Lire aussi à propos de
scanf
, surtout de quoi il en retourne.scanf() le type de retour peut être vérifiée. plz reportez-vous cela en détail
OriginalL'auteur Asia x3 | 2014-09-10
Vous devez vous connecter pour publier un commentaire.
scanf
retourne le nombre d'éléments qu'elle a réussi à lire en fonction de votre format. Vous pouvez créer une boucle qui se ferme que lorsquescanf("%d", &number2);
retourne1
. Le truc, cependant, est d'ignorer des données non valides lorsquescanf
renvoie zéro, de sorte que le code devrait ressembler à ceci:Puisque vous lire un nombre plus d'une fois dans votre code, pensez à faire une fonction pour cacher cette boucle, et d'appeler cette fonction deux fois dans votre
main
pour éviter la duplication.OriginalL'auteur dasblinkenlight
Ici est une solution de votre problème. J'ai juste modifié quelques-uns de votre code.
Lire les commentaires de toutes les explications.
J'ai conçu ce que pour les numéros à deux chiffres, mais il fonctionne très bien pour plus de numéros à deux chiffres pour moi.
S'il vous plaît laissez-moi savoir que la même chose se passe dans votre cas.
Et si vous trouvez pourquoi ce qui se passe s'il vous plaît commentaire.
Et vous pouvez également utiliser
strtol()
au lieu deatoi()
. Je ne suis pas à l'utiliser car de petites valeurs.Différence entre
atoi()
etstrtol()
atoi()
Pro: Simple.
Pro: Convertir un
int
.Pro: Dans la bibliothèque C standard.
Pro: Rapide.
Con: Pas d'erreur de manipulation.
Con: Poignée ni hexadécimal ni octal.
strtol()
Pro: Simple.
Pro: Dans la bibliothèque C standard.
Pro: une Bonne gestion des erreurs.
Pro: Rapide.
Con: Convertir un
long
, pasint
qui peuvent varier en taille.OriginalL'auteur Sachin
Je tiens à dire que vous avez à faire un peu de validation personnalisée pour vérifier si
scanf
lire en entier ou pas.Je suis habituéfgets
pas intéressé dansscanf
.isdigit
doit être jeté à launsigned char
OriginalL'auteur Jayesh Bhoi
Propre approche de ce problème peut être
lire à partir de
stdin
à l'aide defgets()
.utilisation
strtol()
pour convertir et stocker la valeur dans uneint
. Ensuite, vérifiez lachar **endptr
pour déterminer si la conversion est un succès [integer] ou pas.Effectuer la tâche restante.
strtol()
À l'aide de
fgets()
est une bonne approche, mais il n'y a pas besoin d'utiliserisdigit()
pour "valider"; juste essayer avecstrtol()
et examiner sa "fin" pointeur pour voir si elle a consommé de l'entrée.ouais, vous avez raison. Modifié la réponse.
OriginalL'auteur Sourav Ghosh