Forum: Mikrocontroller und Digitale Elektronik Array-Elemente durchgehen bis '\0'


von Peterl (Gast)


Lesenswert?

Hi Leute,

ich programmiere gerade mit MPLAB IDE2 einen MICROCHIP Cotnroller. Bin 
recht neu auf dem Gebiet. Verwendet wir der C30 Compiler.

Ich knapper jetzt an einem simplen Problem und das seit einer Stunde:

Ich möchte mir eine itoa - Funktion basteln. Bestandteil dieser Fkt ist 
folgender Code:
1
 
2
unsigned char temp[12]={};
3
.
4
.
5
.
6
  while (temp[i] != '\0')
7
  {
8
    rest = zahl % 10;
9
    zahl /= 10;
10
11
    temp[i] = rest + 48;
12
    i++;
13
  
14
    if (zahl == 0)
15
    {
16
      temp[i] = '\0';
17
    }
18
  }
19
.
20
.
21
.

Im Debugging werden mir alle temp[i]'s mit int 0 bzw char '.' angezeigt. 
Dennoch wird diese Schleife einfach übersprungen.

Wäre über eine knappes Wort sehr dankbar.

von Steel (Gast)


Lesenswert?

Natürlich wird die übersprungen.

Du scheibst doch sie soll ausgeführt werden solange temp[i] UNGLEICH 0 
ist.

-> while = solange

von Shuzz (Gast)


Lesenswert?

Bieten die Bibliotheken Deines Compilers keine itoa Funktion?
Was spricht gegen ein printf?

von Karl H. (kbuchegg)


Lesenswert?

Peterl schrieb:


> Wäre über eine knappes Wort sehr dankbar.

Tja.
Du hast nicht bedacht, dass temp[0] schon getestet wird, ehe du es 
überhaupt beschreibst. Und durch

unsigned char temp[12]={};

steht da erst mal 0 drinnen. Auch an temp[0].
Wodurch die while Schleife überhaupt nicht betreten wird.

von Peterl (Gast)


Lesenswert?

Ah okay, also habe ich temp[12] mit NULL initialisiert. Mir war nicht 
bewusst, dass int=0 gleich '\0' der ASCII Tabelle entspricht.

Gut, gegen ein printf spricht nichts, wenn das funktioniert. Kannte 
diese Funktion nicht im Bezuf auf µC sondern nur auf Bildschirmausgaben. 
Werde es mir mal anschauen. Danke

von Karl H. (kbuchegg)


Lesenswert?

Gib nicht so schnell auf!
Du kannst an dieser Stelle was lernen!

von Michael L. (michaelx)


Lesenswert?

Um deinem gewünschten Ergebnis näher zu kommen, und was für die Zukunft 
zu lernen, kannst du es ja mal mit einer do-while-Schleife probieren. 
;-)

von (prx) A. K. (prx)


Lesenswert?

Peterl schrieb:
>     temp[i] = rest + 48;

Das ist die falsche Stelle, um zu demonstrieren, dass man den ASCII Code 
kennt. Der Compiler kennt ihn auch:
      temp[i] = rest + '0';

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.