Comparaison tableau de char

Bonjour, je me fait embêter avec un truc pourtant tout simple...
Je dois comparer deux tableau de caractères pour vérifier qu'ils soient égaux. Mais je n'y arrive pas et mon programme retourne l'équation forcément mauvaise... Une idée ?

#include <Keypad.h>

const byte ROWS = 4; 
const byte COLS = 4; 
char code_Ouv[5] = {'6', '3', '6', '6', 'A'};
char code_Act[5] = {0};
int index = 0;
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {2, 3, 4, 5}; 
byte colPins[COLS] = {6, 7, 8, 9}; 

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey && (code_Ouv != code_Act) && index != 5){
	code_Act[index] = customKey;
	Serial.println(code_Act[index]);
	index++;
  }
  else if (index == 5 && (code_Ouv == code_Act))
  {
	Serial.println("Code bon !");
	index = 0;
  }
  else if (index == 5 && (code_Ouv != code_Act))
  {
	Serial.println("Code mauvais !");
	index = 0;
  }
  
}

consider

output

 12345 no-match
 67890 no-match
 6366A match
 6366B no-match

code

const char *code_Ouv = "6366A";

const char *strA = "12345";
const char *strB = "67890";
const char *strC = "6366A";
const char *strD = "6366B";

// -----------------------------------------------------------------------------
bool
match (
    const char *s )
{
   Serial.print (" ");
   Serial.print (s);

    if (! strncmp (s , code_Ouv, strlen (code_Ouv)))  {
        Serial.println (" match");
        return true;
    }

    Serial.println (" no-match");
    return false;
}

void setup()
{
    Serial.begin(9600);

    match (strA);
    match (strB);
    match (strC);
    match (strD);
}

void loop()
{
}

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ je l'ai déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”


la fonction memcmp() permet de comparer deux tableaux

J'ai un mon petit tuto sur la gestion de données asynchrone avec un bout de code applicable à un keypad

On ne compare pas le contenu de tableau comme cela. Il faut soit

  • utiliser strncmp comme proposé par @gcjr
  • faire une boucle qui balaye la suite des cases des tableaux pour faire la comparaison
  • faire la comparaison au vol dans le if (customKey && (code_Ouv != code_Act) && index != 5){
    A chaque valeur entrée s'il y a égalité avec la case code_Ouv[index] on met +1 dans une variable. Lorsqu'index == 5 si la variable vaut 5 alors on a le bon code sinon on remet tout = 0 pour une nouvelle saisie.

attention dans ce cas il faut terminer la chaîne par un caractère nul

et dans les possibilités on peut aussi (comme dit plus haut) utiliser memcmp() qui n'a pas besoin du caractère nul en fin de chaîne

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.