problem mit case



  • hallo zusammen,
    ich bin noch ganz am anfang meiner programmierung mit c++.
    ich hab heute ein kleines programm geschrieben was eine klasse formen und 2 abgeleitete klassen( kreis, rechteck) enthält.
    ich lasse den benutzer ,mittels eingabe einer zahl, wählen welche form er benutzen möchte.
    nehmen wir an rechteck. dann wird die eingabe von länge und breite gefordert.
    in folge wird dann die fläche und der umfang berechnet.

    hier ist mal der teil meines codes

    int main()
    {
    	int choice;
    	float a,b,r;
    	bool exit = false;
    
    	cout << "Berechnung von Formen\n\n";
    
    	for(;;)
    	{
    	choice = Menu();
    	switch(choice)
    	{
    	case 0:
    		exit = true;
    		break;
    	case 1:
    		cout << "Bitte geben Sie die Laenge und Breite Ihres Rechtecks an!\n\n";
    		cout << "Laenge: ";
    		cin  >> a;
    		cout << "\nBreite: ";
    		cin  >> b;
    		Rechteck rectangle(a,b);
    		rectangle.Area();
    		rectangle.Umfang();
    		cout << "\n\nUmfang des Rechtecks: " << rectangle.GetUmfang();
    		cout << "\n\nFlaeche des Rechtecks:  " << rectangle.GetArea();
    		cout << "\n\n";
    		break;
    	case 2:
    		cout << "Bitte geben Sie den Radius Ihres Kreises an!\n\n";
    		cout << "Radius: ";
    		cin  >> r;
    		Kreis circle(r);
    		circle.Area();
    		circle.Umfang();
    		cout << "\n\nUmfang des Kreies : " << circle.GetUmfang();
    		cout << "\n\nFlaeche des Kreies: " << circle.GetArea();
    		cout << "\n\n";
    		break;
    	default:
    		cout << "Ungueltige Eingabe!";
    		break;
    	}
    	if (exit == true)
    	break;
    	}
    	return 0;
    }
    
    //Funktionen
    
    int Menu()
    {
    	int choice;
    	cout << "(0) Beenden (1) Rechteck (2) Kreis\n\n";
    	cout << "Bitte waehlen Sie eine Form aus!\n";
    	cout << "Eingabe: ";
    	cin  >> choice;
    	cout << "\n\n";
    	return choice;
    }
    

    beim kompilieren tretten dann fehler auf

    c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(51) : error C2360: Initialisierung von 'rectangle' durch 'case'-Marke übersprungen
            c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(44) : Siehe Deklaration von 'rectangle'
    c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(62) : error C2361: Initialisierung von 'circle' durch 'default'-Marke übersprungen
            c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(55) : Siehe Deklaration von 'circle'
    c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(62) : error C2361: Initialisierung von 'rectangle' durch 'default'-Marke übersprungen
            c:\dokumente und einstellungen\philipp claus\eigene dateien\myprojects\c++\tag11_3\übung.cpp(44) : Siehe Deklaration von 'rectangle'
    

    vill könntet ihr mir da helfen weil ich bin bei diesen fehlern völlig ratlos.
    an den klassen ist nichts falsch. habe ich schon getestet.

    P.S.: ich würde ja gerne das programm hochladen aber diese option gibts hier ja leider nicht 😞

    naja vill könnt ihr mir ja trotzdem helfen



  • Ich würde es anders machen...

    leg für jede Rechenoperation (also für jede Form) eine Funktion an, welche dann mit den jeweilgein cause befehl aufgerufen wird!

    Verstehste? Ich schreib dir mal wie ich das meine... warte mal ein wenig! Ich melde mich gleich wieder!

    //Taschenrechner zum berechnen verschiedener Formen
    #include <iostream>
    
    using namespace std;
    
    void FunkKreis(); //Funktionen für deine Formen
    //hier kommen alle weitere Funktionen deiner Formen hin
    
    int main()
    {
        int auswahl;
    
        //ein kleines Menü
        cout << "Welche Form wollen sie berechnen?" << endl;
        cout << endl;
        cout << "Kreis        (1)" << endl;
        cout << "Rechteck     (2)" << endl;
        //...
    
        cin >> auswahl;
    
            switch(auswahl)
                ( 
                 case 1: FunkKreis(); //Wenn der User "1" eintipp, kommt er zur Kreisberechnung
                 break;
    
                 case 2: //...
                 break;
                 )
    
        return 0;
        }
    
    void FunkKreis()
    {
    
    // Hier erstellst du jetzt alles was du zum berechnen deines Kreise brauchst   
    
    };
    


  • Ok es hat jetzt geklappt.
    Danke für deine Antwort. Aber mich würde mal interessieren warum die case-Anweisung da gesponnen hat. Falls das noch jemand weiß kann ers ja mal posten. andernfalls mach ichs jetzt halt immer mit funktionen 🙂 😉 ist ja eh etwas übersichtlicher



  • Naja... ich finde diese Sache mit den Funktionen extrem toll!

    Es macht die sache sehr übersichtlich (besonders wenn man sie in andere Dateien auslagert).

    Wenn du alles wichtige eines Programmablaufes in einem extra BLock hast, also der Funktion, erspart man sich viel mühe. Man weiß besser die Fehler zu suchen...

    Ich guck mir deinen Code mal an und versuche zu erkennen was falsch ist!

    Bis später.
    __________________________________________________________________________________

    Och nö! Das sind mir jetzt zu viele Fehler!^^

    Auf jeden Fall arbeitest du mit Funktionen, welche nicht genau deklariert sind und was ich auch 0 verstehe ich das hier`:

    for(;;)
    choice = Menu();
    

    😕 😕 😕



  • wenn du variablen/klassen lokal innerhalb von case blöcken initialsierst/instanziierst, solltest du diesen block in geschweifte klammern setzen, also zB:

    case 1:
        {
            cout << "Bitte geben Sie die Laenge und Breite Ihres Rechtecks an!\n\n";
            cout << "Laenge: ";
            cin  >> a;
            cout << "\nBreite: ";
            cin  >> b;
            Rechteck rectangle(a,b);
            rectangle.Area();
            rectangle.Umfang();
            cout << "\n\nUmfang des Rechtecks: " << rectangle.GetUmfang();
            cout << "\n\nFlaeche des Rechtecks:  " << rectangle.GetArea();
            cout << "\n\n";
            break;
        }
        case 2:
        {
            cout << "Bitte geben Sie den Radius Ihres Kreises an!\n\n";
            cout << "Radius: ";
            cin  >> r;
            Kreis circle(r);
            circle.Area();
            circle.Umfang();
            cout << "\n\nUmfang des Kreies : " << circle.GetUmfang();
            cout << "\n\nFlaeche des Kreies: " << circle.GetArea();
            cout << "\n\n";
            break;
        }
        default:
           break;
    


  • Crew06ZW schrieb:

    Auf jeden Fall arbeitest du mit Funktionen, welche nicht genau deklariert sind

    da ist auch mit sicherheit nicht der ganze code geposted worden 🙂

    Crew06ZW schrieb:

    und was ich auch 0 verstehe ich das hier`:

    for(;;)
    choice = Menu();
    

    😕 😕 😕

    das ist der beginn einer endlosschleife in der zuerst die funktion Menu() aufgerufen wird, und der rückgabewert jener in die variable choice gespeichert wird 🙂

    Crew06ZW schrieb:

    Och nö! Das sind mir jetzt zu viele Fehler!^^

    na dann fang mal an aufzulisten



  • Ah! Achso!

    Das mit der Endlosschleife mach ich immer anders... ich leg meist eine do Schleife um das komplette Programm und erfrag nach jeder Anwendung, ob der User nochmal möchte... aber das ist ja jeden selber überlassen!



  • Crew06ZW schrieb:

    aber das ist ja jeden selber überlassen!

    in der tat. nur schadet es nicht mehrere möglichkeiten zu kennen 🙂



  • sothis_ schrieb:

    in der tat. nur schadet es nicht mehrere möglichkeiten zu kennen 🙂

    Nein, nein! Ich hab ja auch bloß gemeint wie man es noch machen könnte!^^

    Ne do-schleife um das ganze Programm legen und eventl. noch abfragen lassen ob der User nochmal will... wenn ja geht die Schelife wieder von vorne los, und wenn nicht wird das Programm beendet. 😃



  • also ich find da keine fehler außer eben den mit der case-anweisung.
    naja sothis_ hat ja schon alles erklärt...:)
    thx nomma 😉

    ciao


Anmelden zum Antworten