Forum: Mikrocontroller und Digitale Elektronik Frage zur Syntax bei Feldern in C


von Dennis (Gast)


Lesenswert?

Guten Morgen,

ich habe eine Frage zur Syntax von C.

In meinem Programm ist ein Feld folgendermaßen deklariert:
1
unsigned int count_us[3];

über die Variable module mache ich nun eine Auswahl in dem Feld.
Z.B. so:
1
count_us[module]++; // Zählwert f. akt. Modul inkrementieren

Nun gibt es zwei Möglichkeiten, wie ich auf die Daten des Feldes 
zugreife.
Erste Möglichkeit:
1
if (stepcontrol.step5 && count_us[module] > (unsigned int)800)
2
{
3
...
4
}

Die zweite Möglichkeit bezieht sich nicht auf die aktuelle Position im 
Feld sondern auf jene darunter.
Also programmiere ich folgende Zeilen:
1
if (stepcontrol.step6 && count_us[module-1] > (unsigned int)400)
2
{
3
...
4
}

Und das scheint nicht zu funktionieren. Sobald in der eckigen Klammer 
eine Berechnung auftaucht, streikt das Programm.

Was ist daran falsch?

Schönen Feiertag!

Dennis

von Sven P. (Gast)


Lesenswert?

Dennis schrieb:
> Was ist daran falsch?

Es fehlt die Fehlermeldung; ohne die ist jede Ferndiagnose recht 
witzlos.

von Dennis (Gast)


Lesenswert?

Es gibt keine Fehlermeldung.

von Klaus W. (mfgkw)


Lesenswert?

dann ist ja alles in Ordnung!

von Dennis (Gast)


Lesenswert?

Okay, also ist die Syntax in Ordnung. Dann muss der Fehler an einer 
anderen Stelle liegen. Dankeschön!

von Hans M. (Firma: mayer) (oe1smc) Benutzerseite


Lesenswert?

> count_us[module]++; // Zählwert f. akt. Modul inkrementieren

vielleicht so:

count_us[module++] ;

ich nehme an, du willst den pointer erhoehen ?

von Rolf Magnus (Gast)


Lesenswert?

Dennis schrieb:
> Und das scheint nicht zu funktionieren. Sobald in der eckigen Klammer
> eine Berechnung auftaucht, streikt das Programm.

Es "streikt"? Wie manifestiert sich dieser Streik denn?

von Johann (Gast)


Lesenswert?

Zur Fehlersuche solltest Du  noch eine Prüfung 1 <= module <= 3 
einbauen.

von Sven P. (Gast)


Lesenswert?

Johann schrieb:
> Zur Fehlersuche solltest Du  noch eine Prüfung 1 <= module <= 3
> einbauen.
Dabei bitte bemerken, dass dieser Test gültig ist für den Fall, wo mit 
'module-1' indiziert wird.

von Hans M. (Firma: mayer) (oe1smc) Benutzerseite


Lesenswert?

>  Prüfung 1 <= module <= 3

nachdem die adresse des arrays count_us veraendert wird, muessten die 
konstanten "1" u "3" durch eine variable ersetzt werden.

von Klaus (Gast)


Lesenswert?

Dennis schrieb:
> Also programmiere ich folgende Zeilen:
> if (stepcontrol.step6 && count_us[module-1] > (unsigned int)400)
> {
> ...
> }
Sobald module == 0 ist, gibts ein Problem, der array index wäre dann -1.

Erste Frage: kann das vorkommen? Läuft das Programm durch diesen Zweig, 
wenn module == 0?

Zweite Frage: Wenn es vorkommt, was soll es bedeuten oder bewirken. Soll 
es bedeuten: wenn module == 0 ist "jene darunter" auch 0 oder 
möglicherweise 2 ?

MfG Klaus

von horst (Gast)


Lesenswert?

Gibt es die Probleme dann, wenn module den Wert 0 hat, der berechnete 
Index also -1 ist?

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.