[c] case ist keine konstante

MastaZulu

Ensign
Registriert
Aug. 2002
Beiträge
207
Hi Leute,
hab ne neue Studienarbeit bekommen (die meiner Meinung nach für Programmieranfänger etwas zu happig ausgefallen ist, aber das Leben ist kein Wunschkonzert).
Es geht darum, Strings zu ver-/entschlüsseln.
Nun hab ich schon ein Problem beim Menü:

Code:
#include <stdio.h>
#include <conio.h>

const char auswahl_I = 'a', auswahl_II = 'b', auswahl_III = 'c',
			  auswahl_IV = 'x';

void main(void)
  {
	char auswahl;
	
	printf("------------------------------------------\n"
			 "|                                        |\n"
			 "|    ********************************    |\n"   
			 "|    *Ver-/Entschluesselungsprogramm*    |\n"
			 "|    ********************************    |\n"
			 "|                                        |\n"
			 "|  %c) Zyklische Ersetzung                |\n"
			 "|  %c) Verschiebung                       |\n"
			 "|  %c) Kombi                              |\n"
			 "|  %c) Abbruch                            |\n"
			 "|                                        |\n"
			 "------------------------------------------\n",
			 auswahl_I, auswahl_II, auswahl_III, auswahl_IV);	
	
	printf("\nTreffen Sie ihre Wahl (%c, %c, %c, oder %c): ", 
			 auswahl_I, auswahl_II, auswahl_III, auswahl_IV);
	auswahl = getche();
  
	switch (auswahl)
	  {
		case auswahl_I:
			break;
		case auswahl_II:
			break;
		case auswahl_III:
			break;
		case auswahl_IV:
			break;
          }
     
  }
es ist noch nicht ganz fertig, noch im Test-Stadium. Nun sagt er mir folgendes:
"case-Ausdruck ist keine Konstante"
na wieso sag ich ihm dann oben
const char auswahl_I = 'a', auswahl_II = 'b', auswahl_III = 'c', auswahl_IV = 'x'; ?????
hab das mal so gemacht, dass es (aussage prof:) "auch für andere möglich ist, ohne probleme die auswahlmöglichkeiten zu ändern".
 
Zuletzt bearbeitet:
caste einfach auswahl zu "int" (integer):
Code:
switch((int)auswahl)
{
      // ...
}
 
Zuletzt bearbeitet:
@John Doe: Das wird nichts bewirken, bzw. ist auch garnicht das Problem.

AFAIK ist const kein C-Schlüsselwort, bzw. erst später dazu gekommen. Anscheinend erwartet der Compiler im switch Block aber Literale und verschluckt sich an dem const.

Versuch mal, einfach die auswahl_XXX Konstanten direkt durch die entsprechenden Literale zu ersetzen. Alternativ musst du wohl mit defines arbeiten.


Btw: void main ist illegal. Auch wenn viele Compiler das fressen, war ist und bleibt es falsch. Nur int main ist gültig. Ein return 0 muss dann noch ans Ende von main.
 
Wie wäre ein:
Code:
enum Auswahl
{
   AUSWAHL_I   = 'a',
   AUSWAHL_II  = 'b',
   AUSWAHL_III = 'c'
};
Und das dann in den cases verwenden.
Ich habe hier keine Compiler zur Hand, in dem ich das testen könnte.
 
7H3 N4C3R schrieb:
@John Doe: Das wird nichts bewirken, bzw. ist auch garnicht das Problem.
Du hast Recht. Ich könnte schwören gestern ging es als ich es getestet habe. Wie dem auch sei, wenn du
Code:
const char auswahl_I = 'a', auswahl_II = 'b', auswahl_III = 'c',  auswahl_IV = 'x';
mit
Code:
#define auswahl_I 'a'
#define auswahl_II 'b'
#define auswahl_III 'c'
#define auswahl_IV 'x'
ersetzt funktioniert es auf jeden fall. Wie es bereits gesagt wurde.
 
Zurück
Oben