la conversion d'un format ascii vers le type int
gcc 4.5.1 c89
J'ai une mémoire tampon qui est rempli avec de l'omble de caractères. J'ai besoin de comparer:
Ceci est un exemple de contenu de la mémoire tampon:
vote buffer [ 51 ]
vote buffer [ 32 ]
vote buffer [ 49 ]
vote buffer [ 32 ]
vote buffer [ 50 ]
vote buffer [ 32 ]
vote buffer [ 53 ]
vote buffer [ 32 ]
Je suis en train d'essayer d'obtenir l'int équivalent de ces char qui sont dans la mémoire tampon de comparer.
#define NUMBER_OF_CANDIDATES 7
if((vote_data.vote_buff[i] > NUMBER_OF_CANDIDATES || vote_data.vote_buff[i] < 1) {
/* Do something */
}
Comme vous pouvez le voir, il ne sera jamais vrai dans l'instruction si la gamme est beaucoup plus grande.
J'ai essayé la conversion (int). Pourtant, cela n'a pas résolu le problème.
Je suppose que je pourrais calculer à partir du jeu de caractères ascii. Cependant, je préfère ne pas ajouter plus de complexité si je ne peux pas l'aider.
Merci beaucoup pour tous les conseils,
Je ne comprends pas votre problème. Pour sûr, le vote de la mémoire tampon[0], qui est de 51 ans, est plus grand que NUMBER_OF_CANDIDATES qui est de 7. Pourrais tu être un peu plus précis?
51 est le caractère ascii 3. J'ai donc besoin de 3 compare avec la NUMBER_OF_CANDIDATES. Merci.
51 est le caractère ascii 3. J'ai donc besoin de 3 compare avec la NUMBER_OF_CANDIDATES. Merci.
OriginalL'auteur ant2009 | 2010-11-25
Vous devez vous connecter pour publier un commentaire.
Si vous voulez convertir les caractères unique pour
int
, vous pouvez utiliserc - '0'
(ce qui est équivalent àc - 48
). Si vous voulez convertir des chaînes de plus d'un seul caractère, utilisezsscanf()
OriginalL'auteur Sven Marnach
Vous pouvez utiliser atoi pour convertir des chaînes en nombres entiers. Char et int sont les mêmes qu'en C
OriginalL'auteur Juan
Il n'y a rien de construit dans la bibliothèque standard de tourner un
char
dans unint
. C'est parce que la plupart desint
s ne rentrent pas dans unchar
. Cependant, il y a plusieurs façons de transformer une chaîne en unint
, parce que c'est plus souvent fait. Vous pouvez facilement utiliser ces copie chaquechar
dans un le premier élément de longueur 2 tableau avec le deuxième char 0, et en utilisant ce que l'entrée soitatoi()
,sscanf()
, oustrtol()
. (Je vous recommande l'un des deux dernières dans un programme réel, car ils permettent la vérification d'erreur.)En utilisant les valeurs ASCII et en soustrayant
'0'
est certainement une option viable. Tout caractère raisonnable aura les chiffres dans l'ordre.Mieux encore serait de changer l'interface de sorte que votre routine de ne pas recevoir un tableau de
char
, mais un tableau deint
. Les interfaces externes du programme devrait être responsable pour l'assainissement de l'entrée et de la transformer en quelque chose de facile à traiter. Actuellement, il n'existe aucun moyen de modifier facilement le programme de soutien à plus de dix candidats. Laisser les routines de saisie magasinint
s corrige ce.OriginalL'auteur wnoise