[RESOLU]Isoler chiffre d'un nombre dans une variable?

Bonsoir à tous,

Je cherche comment faire pour isoler un chiffre qui se trouve dans une variable, je m'explique;
si j'ai par exemple
int test = 15;

j'aimerai recuperer dans un tableau le 1 et le 5 separement.

Merci

Bonsoir,

Serialkliker:
Je cherche comment faire pour isoler un chiffre qui se trouve dans une variable, je m'explique;
si j'ai par exemple
int test = 15;

j'aimerai recuperer dans un tableau le 1 et le 5 separement.

Sous forme de char[]ou de int[] ?

tableau de char :

int test = 15;
char str[5];
sprintf(str, "%d", test);
// str => {'1', '5', '\0', x, x}

tableau de int :

int test = 15;
int tab[3];
tab[0] = test % 10;
tab[1] = test / 10;
tab[2] = test / 100;
// tab => {unités, dizaines, centaines}

Sa marche, merci beaucoup

J'ai juste une question supplementaire sur ce que tu m'a mis tout à l'heure :

sprintf(str, "%d", test);

Je vois souvent sur des bouts de code sur internet "%02d" ou bien comme tu vient de me mettre mais à quoi sa sert exactement et comment ça s'appelle. Merci

Yep!

%d

Il s'agit de formatage des données de sortie (printf). En l'occurence, %d pour décimale, %02d pour decimale à deux chiffres, %s pour un string, on peut aussi positionner un point pour les chiffres aprés la virgule : %.02d, etc.

Par contre, itoa est certes moins pratique mais cependant moins gourmand que sprintf.

Ecrit rapidement :

Version itoa : 2436 bytes

int value[5] = {15, 125, 1325, 14325, 104325 };
char buff[12];


void setup() {
  Serial.begin(19200);
  delay(1000);
}

void loop() {
  
  for (int i = 0; i < 5; i++) {
    int taille = strlen(itoa(value[i], buff, 10));
    char * data = itoa(value[i], buff, 10);
    Serial.println(data);
    for (int j = 0; j < taille; j++) {
      Serial.println(data[j]);
      delay(500);
    }
    Serial.println("Next number");
  }
}

Version sprintf : 3744 bytes

int value[5] = {15, 125, 1325, 14325, 104325 };
char buff[12];

void setup() {
  Serial.begin(19200);
  delay(1000);
}

void loop() {
  
  for (int i = 0; i < 5; i++) {
    sprintf(buff, "%d", value[i]);
    for (int j = 0; j < 12; j++) {
      Serial.println(buff[j]);
      delay(500);
    }
    Serial.println("Next number");
  }
}

EDIT1 : Arduino Playground - PrintingNumbers

@+

Zoroastre.

zoroastre:
Par contre, itoa est certes moins pratique mais cependant moins gourmand que sprintf.

itoa c'est sympa, mais itoa ne déclenche pas un warning lors de la compilation en cas d'erreur de format <> type de variable :wink:
C'est comme pour atoi et sscanf (qui font l'inverse, string -> nombre), atoi est plus léger mais il est impossible de faire la différence entre une erreur (= -1) et le nombre -1 :wink:

La légèreté ou la "sécurité" (grosse guillemets) mais pas les deux :grin:

Merci beaucoup pour vos explications, c'est beaucoup plus clair maintenant :slight_smile: