Switch Case und Character

OP #6187384
Lesenswert?
• ▲
▼
Hallo zusammen,
ich arbeite zur Zeit mit Atmel Studio 7.0 und einem Arduino Nano mit 
Atmega328P.

Ich bin dabei ein einstelliges 7-Segment-Display mit einem 
Schieberegister anzusteuern.
Das funktioniert auch ganz gut. Ich kann in mein:

char muster[] = {...}

1 und 0 eingeben und die jeweiligen Segmente leuchten auf. ALLES SUPER.

Jetzt dachte ich mir, damit ich die Zahlen 0-9 ausgeben kann pack ich 
das in eine switch-case Abfrage. Jedoch kommt da immer die 
Fehlermeldungen:

crosses initialization of 'char muster [8]'
'char muster [8]' previously declared here

Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch 
mache.

Vielen Dank!!
Angehängte Dateien:
Gast #6187411
Lesenswert?
• ▲
▼
Daniel F. schrieb:
> Jetzt dachte ich mir, damit ich die Zahlen 0-9 ausgeben kann pack ich
> das in eine switch-case Abfrage. Jedoch kommt da immer die
> Fehlermeldungen:
>
> crosses initialization of 'char muster [8]'
> 'char muster [8]' previously declared here

Eine Deklaration kann nur ein Mal erfolgen.
Deine Switc-Case-Geschichte kannst du dir sparen, wenn du ein Array mit 
10 Einträgen und einer Breite von 8 verwendest.
#6187424
Lesenswert?
• ▲
▼
Daniel F. schrieb:
> Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch
> mache.

Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen 
erzeugen und dann später dann an einer Stelle die benutzen, die vorher 
halt erzeugt wurde.

Ich würde die 8 Bit für das Muster ja einfach in einem uint8_t speichern 
statt in einem Array aus char.
#6187451
Lesenswert?
• ▲
▼
Rolf M. schrieb:
> Daniel F. schrieb:
>> Könnt ihr mir bitte sagen was ich bei der switch case abfrage falsch
>> mache.
>
> Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen
> erzeugen und dann später dann an einer Stelle die benutzen, die vorher
> halt erzeugt wurde.
>
> Ich würde die 8 Bit für das Muster ja einfach in einem uint8_t speichern
> statt in einem Array aus char.

Zumal man diese 8Bit als Konstante auch so schreiben kann:
1
muster = 0b01101001;
Und damit optisch jedes einzelne Bit sehen kann;
#6187535
Lesenswert?
• ▲
▼
Dirk B. schrieb:
> Rolf M. schrieb:
>> Du kannst nicht abhängig von einer Bedingung unterschiedliche Variablen
>> erzeugen und dann später dann an einer Stelle die benutzen, die vorher
>> halt erzeugt wurde.
>
> Das geht schon - also unterschiedliche - nur dieselbe Variable mehrmals
> geht nicht.

Nein, auch wenn es verschiedene Variablen wären, würde das nicht so 
gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche 
Fehlermeldung kommen.
Wie sollte das auch funktionieren? Was soll passieren, wenn du nach dem 
switch versuchst auf eine Variable zuzugreifen, die in einem der nicht 
ausgeführten cases definiert wurde?
#6187544
Lesenswert?
• ▲
▼
Rolf M. schrieb:
> Nein, auch wenn es verschiedene Variablen wären, würde das nicht so
> gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche
> Fehlermeldung kommen.

Warum sollte
crosses initialization of 'xxx'
'xxx' previously declared here
kommen, wenn man es erstmals definiert.


Rolf M. schrieb:
> Was soll passieren, wenn du nach dem
> switch versuchst auf eine Variable zuzugreifen, die in einem der nicht
> ausgeführten cases definiert wurde?

Das ist ein anderes Problem (welches ich aber schon angesprochen hatte).
#6187560
Lesenswert?
• ▲
▼
Dirk B. schrieb:
> Rolf M. schrieb:
>> Nein, auch wenn es verschiedene Variablen wären, würde das nicht so
>> gehen. Wenn man jeder einen anderen Namen gibt, wird die gleiche
>> Fehlermeldung kommen.
>
> Warum sollte
> crosses initialization of 'xxx'
> 'xxx' previously declared here
> kommen, wenn man es erstmals definiert.

Ok, der zweite Fehler natürlich nicht. Der erste aber schon.

> Rolf M. schrieb:
>> Was soll passieren, wenn du nach dem
>> switch versuchst auf eine Variable zuzugreifen, die in einem der nicht
>> ausgeführten cases definiert wurde?
>
> Das ist ein anderes Problem (welches ich aber schon angesprochen hatte).

Das ist genau das Problem. Eine Variable kann nicht an einer bestimmten 
Stelle vom Programm abhängig von einer Bedingung definiert oder nicht 
definiert sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren