Zahl in Array speichern

vor 28 weeks 4 days von Freeeduino

Hallo,

ich hatte vor eine 3 stellige Zahl in einem Feld mit 3 Plätzen zu speichern, für ein größeres Projekt, habe aber daher erstmal ein Testsketch geschrieben, aber letztendlich weicht die letzte Zahl manchmal ab.

Hier der Code:

int  number = 234;
int  array[3];
 
void setup() { 
 Serial.begin(9600);
 Serial.println("Connection established baud 9600"); 
 
 
}
 
void loop () {
 
 
 
 array[1]=number/100 ;
 array[2]=(number-array[1]*100)/10 ;
 array[3]=number-(array[1]*100+array[2]*10);
 
 Serial.println(number);
 Serial.print(array[1]);
 Serial.print(" ");
 Serial.print(array[2]);
 Serial.print(" ");
 Serial.print(array[3]);
 Serial.println(" ");
 Serial.println(" ");
 delay(500);
}

Dazu dann dieses Serial Monitor Log:

Quote:

Connection established baud 9600
234
2 3 4

234
2 3 4

234
2 3 5

234
2 3 5

234
2 3 4

234
2 3 4

habe schon gedacht, dass es vielleicht deshalb passiert, dass nachkommastellen dazwischenfunken und habe das Array auch extra als int deklariert (da es dabei ja eigentlich keine nachkommastellen gibt).

Wenn ich die berechnung allerdings in void setup schreibe, spinnt der völlig (siehe Log).

int  number = 234;
int array[3];
 
void setup() { 
 Serial.begin(9600);
 Serial.println("Connection established baud 9600"); 
 
 array[1]=number/100 ;
 array[2]=(number-array[1]*100)/10 ;
 array[3]=number-(array[1]*100+array[2]*10);
 
}
 
void loop () {
 
 
 
 
 
 Serial.println(number);
 Serial.print(array[1]);
 Serial.print(" ");
 Serial.print(array[2]);
 Serial.print(" ");
 Serial.print(array[3]);
 Serial.println(" ");
 Serial.println(" ");
 delay(500);
}

Quote:

Connection established baud 9600
234
2 3 4

234
2 3 493

234
2 3 982

234
2 3 1471

234
2 3 1960

Der dürfte doch eigentlich nur einmal rechnen, deshalb dürfte sich der letzte Wert doch überhauptnicht ändern ... ???

Ähnliche Posts

3 Antworten auf “Zahl in Array speichern”


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
  1. uwe sagt:

    Du bestimmst ein Array mit 3 Elementen:

    int array[3];

    Nimmst dann aber das 2., 3. und nicht existierende 4. Element des Arrays.

    array[1]=number/100 ;
    array[2]=(number-array[1]*100)/10 ;
    array[3]=number-(array[1]*100+array[2]*10);

    Das 4. Element wird in den zwei Speicherzellen nach den Speicherzellen des Arrays gespeichert. Diese 2 Speicherzellen wenden aber für andere Zwecke verwendet und darum vom Programm verändert.

    Nimm bitte die Elemente array[0] bis array[2].

    Ich würde aber die Zerlegung der Zahl anders machen:

    array[2]= number%10;  // Einerstelle
    number/=10;
    array[1]= number%10;  // Zehnerstelle
    number/=10;
    array[0]= number%10;  // Hunderterstelle

    So kannst Du das nämlich in eine for-Schleife einfügen und ist für beliebig lange Zahlen gültig.

    grüße Uwe

    Login or register to post comments

  1. Freeeduino sagt:

    alles klar funktioniert ;)

    funktioniert auch mit meinem programm, habe nur einen gedankenfehler gehabt, (habe es nämlich auhc schon mit array 0,1,2, versucht, aber dann bei Serial.print array 1,2,3 ausgegeben ich trottel ... )

    Login or register to post comments

  1. uwe sagt:

    Ein Array fängt immer bei Index [0] an.
    Grüße Uwe

    Login or register to post comments