Je veux empêcher mon programme de tout autre type d'entrée au lieu de int. Comment vérifier le type d'une entrée sans l'affecter à une variable? dans Ccomment limiter une entrée dans c
Répondre
vous devriez le mettre dans une variable char (ou une chaîne) vérifier sa validité, puis le mettre à l'int var. vous devez lire les données quelque part.
Toutes ces fonctions prennent un paramètre out (généralement appelé endptr
) qui vous montre où la conversion s'est terminée. Vous pouvez utiliser cette information pour décider si l'entrée que vous vouliez convertir était un entier ou un nombre à virgule flottante ou pas un nombre du tout.
La stratégie consiste à essayer d'analyser l'entrée en tant que base 10 de long. Si cela ne fonctionne pas (c'est-à-dire s'il y a des caractères non convertis), voyez si l'analyse en double fonctionne. Si aucun ne fonctionne, l'entrée n'est pas un nombre. De toute évidence, vous devez décider quel type de base vous souhaitez utiliser pour les nombres. Vous pouvez ajouter plus de vérifications et d'améliorations, mais voici un exemple simple.
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct a_number {
unsigned char is_long;
union {
double d;
long i;
};
};
int main(void) {
int n;
char *input_strings[3] = {
"1234","1234.56", "12asdf"
};
struct a_number *numbers[3];
for (n = 0; n < 3; ++n) {
char *start = input_strings[n];
char *end;
long i = strtol(start, &end, 10);
if (*end == '\0') {
struct a_number *num = malloc(sizeof(*num));
assert(num);
num->is_long = 1;
num->i = i;
numbers[n] = num;
}
else {
double d = strtod(start, &end);
if (*end == '\0') {
struct a_number *num = malloc(sizeof(*num));
assert(num);
num->is_long = 0;
num->d = d;
numbers[n] = num;
}
else {
numbers[n] = NULL;
}
}
}
for (n = 0; n < 3; ++n) {
if (numbers[n]) {
if (numbers[n]->is_long) {
printf("%ld\n", numbers[n]->i);
}
else {
printf("%g\n", numbers[n]->d);
}
}
}
return 0;
}
Sans affecter l'entrée à une variable, vous ne pouvez pas le faire.
- 1. Comment limiter CreateWindowEx à une entrée alphanumérique uniquement?
- 2. Comment envoyer une entrée dans une boucle continue? (C++)
- 3. Comment limiter un événement textchanged pour une zone de texte à une entrée au clavier uniquement?
- 4. Comment faire une colonne DataGridView sans entrée dans VS2010/C#
- 5. Comment faire une touche « Entrée » par C# dans ASP.net
- 6. Comment est-ce que je peux limiter le nombre de caractères pour une entrée de console? C#
- 7. Limiter la taille du tas géré dans une application C#
- 8. Comment limiter le texte entré dans un élément de texte en entrée à l'aide de jQuery?
- 9. Comment désinfecter une entrée dans wordpress
- 10. Comment limiter le nombre d'éléments itérés dans une boucle foreach?
- 11. Comment limiter la date?
- 12. comment obtenir une entrée dans OLE DB Jet Query
- 13. Obtenir une entrée d'un fichier en C++
- 14. Comment envoyer une entrée au programme caché C++?
- 15. C - printf et scanf - Comment terminer une entrée?
- 16. C chaîne entrée confusion
- 17. C++ retour si une entrée invalide
- 18. comment limiter l'analyse dans l'iphone?
- 19. entrée multiples lignes C++
- 20. Appuyez sur Entrée pour continuer dans C
- 21. Enregistrer une entrée dans une table et une entrée liée dans une autre en même temps?
- 22. Comment vérifier la longueur d'une entrée? (C++)
- 23. Limiter les caractères utilisés dans une chaîne
- 24. Comment lire une entrée formatée en Java?
- 25. Comment limiter une requête de distance MySQL
- 26. dernière entrée dans une boucle
- 27. Puzzler Entrée en C
- 28. C++ entrée allegro
- 29. Comment limiter un nombre à une gamme
- 30. Entrée dans C. Scanf avant obtient. Problème
De quelle forme parlez-vous? Entrée de la console? Entrée d'un fichier? Entrée sur le réseau? – Storm