De la manière la plus simple possible, comment puis-je vérifier si un nombre entier initialisé à partir de la fonction scanf
est un nombre?Vérifiez si une valeur de scanf est un nombre?
Répondre
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
En cas de succès, [scanf] renvoie le nombre d'articles lu avec succès. Ce nombre peut correspondre au nombre attendu de lectures ou moins, voire zéro, si un échec correspondant se produit. Dans le cas d'une panne d'entrée avant que toutes les données puissent être lues avec succès, EOF est renvoyé.
Ainsi, vous pouvez faire quelque chose comme ceci:
#include <stdio.h>
int main()
{
int v;
if (scanf("%d", &v) == 1) {
printf("OK\n");
} else {
printf("Not an integer.\n");
}
return 0;
}
Mais il est vous suggérons d'utiliser à la place fgets et strtol.
Merci mec, ça marche mais si je mets ça en boucle, ça ne marche pas correctement, si l'entrée est une chaîne au début, la boucle est infinie, je peux résoudre? – genesisxyz
Je mets un getchar(); inside ... fonctionne maintenant – genesisxyz
'sscanf' et' scanf' est une mauvaise idée. Les deux produisent un comportement indéfini en cas de débordement. – AnT
Votre question est formulée de façon étrange. Un entier initialisé est toujours un nombre (mis à part les cas exotiques de représentation de trap), ce qui signifie qu'il n'est pas nécessaire de vérifier quoi que ce soit.
Je suppose que vous devez vérifier si la chaîne donnée est une représentation valide d'un nombre. Pour cela, vous devez d'abord définir à quoi doit ressembler la représentation valide. Autorisez-vous le signe? Un +
redondant est-il autorisé (comme un signe)? Qu'en est-il du préfixe 0x
pour les hexadécimaux? Etc.
Le langage C propose son propre ensemble de règles qui définissent l'idée du langage d'une représentation de chaîne valide d'un entier. Si c'est ce dont vous avez besoin, afin de vérifier si la chaîne donnée satisfait ces règles, la meilleure façon est d'utiliser la fonction de conversion chaîne-nombre entier comme strtol
(et d'autres fonctions du groupe strto...
) puis vérifiez la condition d'erreur.
Méfiez-vous des réponses qui suggèrent d'écrire votre propre fonction pour vérifier ces règles. Cela n'a tout simplement aucun sens, puisque la fonction standard existe déjà. En outre, à proprement parler, dans la programmation réelle, il est rarement nécessaire d'effectuer une vérification sans la conversion réelle. strto...
fera les deux.
De même, éloignez-vous des fonctions du groupe scanf
pour convertir les chaînes en nombres entiers. Ces fonctions produisent un comportement indéfini en cas de débordement (c'est-à-dire si la représentation de la chaîne d'entrée est trop longue). En général, la seule façon appropriée de faire une telle conversion dans C est les fonctions du groupe strto...
.
- 1. RegEx- Vérifiez si c'est un nombre masqué
- 2. Vérifiez si une valeur est dans une collection avec LINQ
- 3. Vérifiez si une variable est un tableau
- 4. Vérifiez si un fichier est une image
- 5. Vérifiez si textbox a une valeur vide
- 6. Vérifiez si une valeur existe dans ArrayList
- 7. Vérifiez si Html.ValidationSummary() a une valeur
- 8. Vérifiez si une valeur de colonne est contenue dans une autre valeur de colonne (TSQL)?
- 9. Vérifiez si un objet est une collection générique
- 10. Vérifiez si une date donnée est passée
- 11. Vérifiez si une variable contient une valeur numérique en Javascript?
- 12. Vérifiez si un fichier est ouvert
- 13. Vérifiez si la valeur est isset et null
- 14. Vérifiez si une chaîne particulière est dans un fichier bash
- 15. Vérifiez si l'utilisateur est connecté
- 16. PHP: Vérifiez si 0?
- 17. Vérifiez si la valeur est disponible dans une liste ou non avec valeur disponible
- 18. Vérifiez si UIView est touché?
- 19. Vérifiez si le bouton radio Valeur vérifiée
- 20. Microsoft Reporting: vérifiez si une certaine valeur existe
- 21. Vérifiez si une série de nombres correspond à une valeur définie et augmentez-la si nécessaire.
- 22. Vérifiez si le débogage est activé dans une application Pylons
- 23. Vérifiez si une variable est null dans plsql
- 24. Vérifiez si une balise de gabarit est chargée dans Django
- 25. Vérifiez si une valeur est présente dans une colonne ou non dans le serveur SQL 2005
- 26. Vérifiez si un tableau est vide sans utiliser de boucle?
- 27. Vérifiez si une variable de session est définie
- 28. Vérifiez si un objet dans un tableau 2d est nul
- 29. Comment détecter si un nombre donné est un nombre entier?
- 30. Vérifiez si ResultSet est Null si pas alors obtenir int
Je crois que cette question répond à la vôtre. http://stackoverflow.com/questions/456303/how-to-validate-input-using-scanf – hometoast
si un nombre entier est un nombre? –
J'ai lu la question comme "si la chaîne lue est un nombre entier valide." – hometoast