Bleme code C validation carte credit

Fermé
xman_genius Messages postés 97 Date d'inscription vendredi 14 octobre 2005 Statut Membre Dernière intervention 21 novembre 2006 - 23 mars 2006 à 18:44
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 24 mars 2006 à 10:22
salut j ai un bleme avec mon code qui se plante
et me signale l'erreur suivante
ce code permet la validation d'une carte banquaire
invalide conversion from char to const char at line 15
initializing argument 1 of `int atoi(const char*)' at line 15

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

bool verifcard(char char_tab[16])
{
char *ptr;
int num_tab[16];
int nbr,sum,key;
if (strlen(char_tab)!=16)
{
goto fin;
}
for(nbr=0;nbr<strlen(char_tab)-1;nbr+=2)
{
num_tab[nbr]=atoi(char_tab[nbr])*2;
num_tab[nbr+1]=atoi(char_tab[nbr+1]);
sum+=(num_tab[nbr]+num_tab[nbr+1]);
}
nbr=(((int)(sum/10)+1)*10);
key=nbr-sum;
if(key==atoi(char_tab[15]))
return true;
else
goto fin;
fin:
{
return false;
}
}
A voir également:

3 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
23 mars 2006 à 18:47
Fais une conversion à la volée:
atoi( (const char *) char_tab[nbr] );
1
xman_genius Messages postés 97 Date d'inscription vendredi 14 octobre 2005 Statut Membre Dernière intervention 21 novembre 2006 21
24 mars 2006 à 09:10
désolé avec le casting le code se plante
s il y a une autre fonction que "atoi ()" qui a la meme fonctionnalité mais avec un type char et non string
merci de me repondre
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
24 mars 2006 à 10:22
Ah mais oui je suis bête.
char_tb est un tableau mais un element de chr_tab est un char.

Donc il faut que tu crées une variable temporaire pour copier dedans tes valeurs au fur et à mesure et en terminant avec le caractère de fin de chaîne '\0'

Par exemple au lieu de:
num_tab[nbr]=atoi(char_tab[nbr])*2;

Tu fais:
char temp[2];
temp[0]=char_tab[nbr];
temp[1]='\0';
num_tab[nbr]=atoi( (const char *) temp);


Voilà. Ou bien tu te crées une fonction qui convertit en entier depuis le code ascii pour un char.
0