Bleme code C validation carte credit

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;
}
}

3 réponses

  1. Modérateur
    Fais une conversion à la volée:
    atoi( (const char *) char_tab[nbr] );
    1
    1. 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
      1. Modérateur
        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