2016-11-19 4 views
-3

J'ai des numéros de cartes de crédit fictifs stockés en tant que tableau char et longs. Afin de vérifier si la carte est VISA, MASTER ou AMEX, je dois vérifier les deux premiers chiffres soit de ce long long soit de cette chaîne. numéros MasterCard tous commencent par 51, 52, 53, 54 ou 55 numéros American Express commencent par 34 ou 37 numéros de visa commencent tous par 4Vérifiez les deux premiers éléments de char array et envoyez-les à un entier

Toute idée comment faire? J'ai essayé de mettre deux entiers séparés et de vérifier plus tard avec if/else, mais je suppose qu'il pourrait y avoir une meilleure façon de résoudre ce problème. Merci pour l'aide.

+1

N'utilisez pas un type entier pour le numéro de carte, rester avec un tableau. Pour une chose, vous devrez étendre l'entier à ce qui a été entré pour examiner chaque chiffre. Pour un autre si le numéro de carte commence par un ou plusieurs '0', ils seront perdus dans la conversion entière. Veuillez poster l'exemple [Minimal, Complete et Vérifiable] (http://stackoverflow.com/help/mcve) qui montre le problème. Montrez quelques exemples de l'entrée, de la sortie attendue et de la sortie réelle. –

+0

J'ai compris, Vane. Merci pour l'aide. –

Répondre

1

Vous pouvez utiliser une fonction sur le tableau de caractères comme:

inline int starts_with(char *string, char *begin) 
{ 
    return strncmp(string, begin, strlen(begin)); 
} 

Et il suffit de cocher contre les constantes

#define MASTER_1 "51" 
... 
#define MASTER_5 "55" 

avec

if (starts_with(string, MASTER_1) || starts_with(string, MASTER_2) || etc.) 
{ 
    ... 
} 
else if (...) { 
    ... 
} 

etc etc

Si les cas vous mentionnés sont les seuls cependant, vous pouvez simplement activer le premier chiffre (depuis 5 => maître, 3 => express américain, 4 => visa)

+0

Parfait, Travail d'Artiz. Appréciez-le. –