Switch Case und Character

OP #6187384
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
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.
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.
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;
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?
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).
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.