Instruction disant qu'une variable fait partie d'une liste ou d'un ensemble

Bonjour,
Je me souviens dans le temps, dans d'autres langage, je ne sais plus si c'est le C standard ou delphi,
on pouvait tester si une variable faisait partie d'une liste de mot, du style.

if (var in [mot1;mot2mot3]) ...

est ce que ca existe avec Arduino ?

Sans utiliser une table qui stocke les mot en faisant une boucle for
Sans utiliser les String
Sans utiliser les Regex
Sans utiliser les vecteurs ...
Je sais qu'avec cela ce doit être possible et que ca existe en Python

Je n'ai pas trouvé d'infos sur ce sujet
Merci.

Du coup pour le principe je suis passé par une fonction.

boolean IsInList(char **list, char * keyword)
{
  for(int i =0; i < ROW_COUNT(list); i++) {
      if (strcmp(keyword, list[i]) == 0) return true;
  }
  return false;
}

Bonjour,

D'ou vient cette fonction ROW_COUNT?
De toute façon ta fonction ne connait pas le nombre d'éléments de list. Il faut soit lui passer le nombre d'éléments de list soit avoir une valeur particulière qui indique la fin de list (par exemple nullptr).

ROW_COUNT connait le nombre d'élément, moi j'initialise toujours mes tableaux à 0 ou null.

#define ROW_COUNT(array)    (sizeof(array) / sizeof(*array))
#define COLUMN_COUNT(array) (sizeof(array) / (sizeof(**array) * ROW_COUNT(array)))

Peut être que tu veux dire si mon tableaux n'est pas remplit entièrement ?
mais en général je remplit mes tableaux.

ROW_COUNT est valable pour n'importe quel tableaux, que ce soit tableaux de pointeurs, de int, de char ...

La fonction est spécifique à un tableau de pointeurs dans ce cas.

Comme je te l'ai dit, ta fonction ne connait pas la taille du tableau.

Je ne comprends pas ce que tu veux dire, row_count me donne le nombre total du tableaux,

Si j'ai un tableau
char tab[50];
ROW_COUNT(tab] me retourne 50

Donc on connait la taille du tableau, je parle de la taille et non le nombre d'éléments contenu dans le tableau.

Dans mon exemple si je passe en paramètre un tableau déclarer comme

char *tab[40];
ROW_COUNT(tab) renverra 40.

Dans le code que j'ai mis, le tableau est remplit jusqu'au bout, après rien
ne m'empêche de tester dans la boucle si

 tab[i] != 0
 ou
tab[i] != NULL

Je ne comprend toujours pas ta question, si je doit répondre, je dirai, oui, je confirme je connais la taille du tableau.

fais un Serial.println(ROW_COUNT(list)) dans ta fonction IsInList

Dans la fonction vous n’avez plus un type tableau mais juste un pointeur sur le premier élément.

Il faut passer en paramètre le nombre d’éléments (et la votre macro pourra être utilisée)

Oui vous aviez raison, ca ne pouvait pas fonctionner, j'ai donc passé la longueur en paramètre et ca fonctionne correctement.
Merci @kamill et @J-M-L, pour votre aide.

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