Switch case C++

Neue Frage »

Auf diesen Beitrag antworten »
profi Switch case C++

Meine Frage:
Hallo leute ich stecke gerade bei einer Aufgabe fest:

Es ist ein Programm für ein Menue zu erstellen, wo ein Anwender wiederholt aus einer Reihe von Aktionen auswählen kann. In dem Programm soll - ein Menue zur Auswahl der Aktionen angezeigt werden - der Anwender per geeigneter Eingabe eine der Aktionen auswählen - diese gewählte Aktion durchgeführt werden. Dies wird solange wiederholt, bis der Anwender per geeigneter Eingabe entscheidet, dass das Programm beendet werden soll.
Folgende Aktionen sollen zur Auswahl stehen und mittels switch realisiert werden: I. 3 neue Zahlen einlesen. II. Die zuletzt mit I) eingelesenen Zahlen ausgeben (Reihenfolge wie bei der Eingabe). III. Die zuletzt mit I) eingelesenen Zahlen absteigend sortiert ausgeben. IV. Den Mittelwert der 3 zuletzt mit I) eingelesenen Zahlen ausgeben. V. Den Median der 3 zuletzt mit I) eingelesenen Zahlen ausgeben. Hinweis: der Median ist hier der mittlere Wert der Zahlen in sortierter Reihenfolge VI. Das Programm beenden.

Mein programm sieht im moment so aus:

#include <iostream>

using namespace std;

int main()
{

char Auswahl;

cout<< "Startmenue" << endl;

cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

cout << "(C) Absteigend sortiert" << endl;

cout << "(D) Mittelwert" << endl;

cout << "(E) Beenden" << endl;

switch(Auswahl){

case('A');

case('a');

int a = x;

int b = y;

int c = z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

case('B');

case('b');

cout << x << " " << y << " " << z << endl;





}
}

Mein compiler zeigt mir den fehler an :

x is not declared in this scope.

Kann mir jemand helfen?

Meine Ideen:
gepostet
 
Auf diesen Beitrag antworten »
eulerscheZahl

Deine Fehlermeldung besagt, dass du schreibst int a = x;
was ist überhaupt x, das hast du vorher noch nie verwendet, noch nichtmal gesagt, dass das auch ein int ist.

Außerdem:
-Du fragst Auswahl ab, ohne es eingelesen zu haben
-case 'A': //da muss ein Doppelpunkt hin, kein Semikolon
Auf diesen Beitrag antworten »
profi

Oh man jetzt funktioniert es:

#include <iostream>

using namespace std;

int main()
{

char Auswahl;

cout<< "Startmenue" << endl;

cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

cout << "(C) Absteigend sortiert" << endl;

cout << "(D) Mittelwert" << endl;

cout << "(E) Beenden" << endl;

switch(Auswahl){

case('A'):

case('a'):

int x;

int y;

int z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

case('B'):

case('b'):

cout << x << " " << y << " " << z << endl;





}
}


Stimmt es so?
Auf diesen Beitrag antworten »
eulerscheZahl

Sieht zumindest schon besser aus, beim Ausführen kiriege ich aber immer noch eine Fehlermeldung:
Zitat:
Run-Time Check Failure #3 - The variable 'Auswahl' is being used without being initialized.

Schreibe mal vor das switch: cin >> Auswahl;

Weitere Punkte:
-int x, y, z; sollten oberhalb des switch definiert werden
- am Ende eines Blocks bei switch kommt das Wort break
 
Auf diesen Beitrag antworten »
profi

#include <iostream>

using namespace std;

int main()
{

char Auswahl;

cout<< "Startmenue" << endl;

cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

cout << "(C) Absteigend sortiert" << endl;

cout << "(D) Mittelwert" << endl;

cout << "(E) Beenden" << endl;

cin >> Auswahl;

switch(Auswahl){

case('A'):

case('a'):

int x;

int y;

int z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

break;

case('B'):

case('b'):

cout << x << " " << y << " " << z << endl;

break;

case('C'):

case('c'):

int x;
int y;
int z;

int x = a;

if( a > y && y < z && z > a ){

a =y;
}

cout << y << " " << x << " " << z;

break;





}
}


Ist mein sortieren bei case c richtig?
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
int x;
int y;
int z;

int x = a;

sollte wohl heißen int a = x;

Du schreibst bei case A und bei case C:
int x; int y; int z;
Du kannst du Variablen nur einmal verwenden, und selbst wenn es ginge, würdest du in C nicht mehr mit den Werten aus A arbeiten.

Versuche mal deinen Codeanfang (Variablen brauchst du danach keine mehr zu definieren)
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#include <iostream>

using namespace std;

int main()
{
	char Auswahl;
	int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

	cout << "Startmenue" << endl;
	cout << "(A) Es sollen 3 Zahlen eingelesen werden" <<endl;
	cout << "(B) Zuletzt eingelesene Zahl ausgeben" <<endl;
	cout << "(C) Absteigend sortiert" << endl;
	cout << "(D) Mittelwert" << endl;
	cout << "(E) Median" << endl;
	cout << "(F) Beenden" << endl;
	cin >> Auswahl;

	switch(Auswahl)
//...
Auf diesen Beitrag antworten »
profi

int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

Soll ich das jetzt am Anfang einbauen oder wie?

Aber warum setze ich die int = 0 ?

Das verstehe ich nicht.

Und was bewirkt das y_sort usw?
Auf diesen Beitrag antworten »
eulerscheZahl

Ja, das soll an den Anfang.
Man kann nicht sicher sein, dass der Nutzer zuerst Zahlen einliest, bevor er sie wieder ausgeben lässt(können wir später noch ändern), deshalb bringe ich sie erst mal auf einen definierten Startwert.

Das y_sort habe ich gemacht, weil du die Zahlen später noch sortieren sollst, da kommt dann der mittlere Wert rein, in x_sort der größte, in z_sort der kleinste.
Auf diesen Beitrag antworten »
profi

Ich habs jetzt umgekehrt gemacht .

Ich hab jetzt versucht in y den kleinsten wert zu stellen .

Würde das so gehen ?

#include <iostream>

using namespace std;

int main()
{

char Auswahl;

cout<< "Startmenue" << endl;

cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

cout << "(C) Absteigend sortiert" << endl;

cout << "(D) Mittelwert" << endl;

cout << "(E) Beenden" << endl;

cin >> Auswahl;

int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

switch(Auswahl){


case('A'):

case('a'):

int x;

int y;

int z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

break;

case('B'):

case('b'):

cout << x << " " << y << " " << z << endl;

break;

case('C'):

case('c'):



int x_sort = a;

if( a > y_sort && y_sort < z_sort && z_sort > a ){

a =y_sort;
}

cout << y_sort << " " << x_sort << " " << z_sort;

break;





}
}

Aber mir wird hier ein Fehler angezeigt:

int x_sort = a;

Warum das verstehe ich immer noch nicht?
Auf diesen Beitrag antworten »
Airblader

Ganz am Rande: Setze deine Code-Snippets bitte in entspr. code-Tags, damit man sie auch bequem lesen kann und die (hoffentlich vorhandene) Formatierung erhalten bleibt.
Auf diesen Beitrag antworten »
eulerscheZahl

In case A sollst du doch keine Variablen mehr definieren, das ist doch schon davor passiert.

In case C willst du ein a benutzen, das du nirgendwo definiert hast.
Gleichzeitig gibt es aber schon ein y_sort.
Der Aufbau ist immer so:
Datentyp NeuerName = EtwasBekanntes;
also z.B. int a = y_sort;
oder char Auswahl = 'A';
Auf diesen Beitrag antworten »
profi

Wie mache ich das in code tags?
Auf diesen Beitrag antworten »
eulerscheZahl

Code einschließen mit [_code] ... [_/code] (der Unterstrich muss raus)

code:
1:
2:
Zeile 1
Zeile 2


Klicke bei meinem Beitrag auf zitieren, dann siehst du, wie ich es gemacht habe.
Auf diesen Beitrag antworten »
profi

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
#include <iostream>

using namespace std;

int main()
{

    char Auswahl;

    cout<< "Startmenue" << endl;

    cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

    cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

    cout << "(C) Absteigend sortiert" << endl;

    cout << "(D) Mittelwert" << endl;

    cout << "(E) Beenden"  << endl;

    cin >> Auswahl;

    int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

    switch(Auswahl){


        case('A'):

        case('a'):

        int  x;

        int  y;

        int z;

        cout << "1 Zahl" << endl;

        cin >> x;

        cout << "2 Zahl" << endl;

        cin >> y;

        cout << "3 Zahl" << endl;

        cin >> z;

        break;

        case('B'):

        case('b'):

        cout <<  x  << " " << y << " " << z << endl;

        break;

        case('C'):

        case('c'):



         int a = x_sort;


            if( a > y_sort && y_sort < z_sort && z_sort > a  ){

                a =y_sort;
            }

            cout << y_sort  <<  " "  << a  << " " << z_sort;

            break;


           case('D'):

           case( 'd'):

           cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3  <<endl;

           break;







    }
}


SO sieht mein code jetzt aus .

Leider wird mir bei case d wieder ein fehler am anfang angezeigt.

Aber ich habe noch eine frage was kann ich denn jetzt machen das wenn ich z.B c eingebe , das dann die eingelesenen zahlen sortiert angezeigt werden ?
Auf diesen Beitrag antworten »
eulerscheZahl

Der Fehler ist schon bei case C, wie schon beschrieben
Zitat:
In case C willst du ein a benutzen, das du nirgendwo definiert hast.


Die Frage ist erstmal, was du machen kannst, damit die eingelesenen Zahlen überhaupt verwendet werden, bisher beendet das Programm nach einmaligem Einlesen der Zahlen.

Und wie gesagt, die Variablen haben wir alle schon definiert, bitte lösche die Zeilen 33-37 sowie 67 aus deinem Code. Und die Leerzeilen könntest du auch entfernen, dann passt das Programm auch ohne Scrollen auf den Monitor.
Auf diesen Beitrag antworten »
profi

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
#include <iostream>

using namespace std;

int main()
{

    char Auswahl;

    cout<< "Startmenue" << endl;

    cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

    cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

    cout << "(C) Absteigend sortiert" << endl;

    cout << "(D) Mittelwert" << endl;

    cout << "(E) Beenden"  << endl;

    cin >> Auswahl;

    int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

    switch(Auswahl){


        case('A'):

        case('a'):


        cout << "1 Zahl" << endl;

        cin >> x;

        cout << "2 Zahl" << endl;

        cin >> y;

        cout << "3 Zahl" << endl;

        cin >> z;

        break;

        case('B'):

        case('b'):

        cout <<  x  << " " << y << " " << z << endl;

        break;

        case('C'):

        case('c'):

            int a;


            a = x_sort;


            if( a > y_sort && y_sort < z_sort && z_sort > a  ){

                a =y_sort;
            }

            cout << y_sort  <<  " "  << a  << " " << z_sort;

            break;

           case('D'):

           case('d'):

           cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3  <<endl;

           break;







    }
}



Jetzt stimmte es soweit denke ich.


Die Frage ist erstmal, was du machen kannst, damit die eingelesenen Zahlen überhaupt verwendet werden, bisher beendet das Programm nach einmaligem Einlesen der Zahlen.

DA habe ich im moment keine idee was ich machen kann.

Hast du irgendwie tipps für mich?
Auf diesen Beitrag antworten »
eulerscheZahl

Eine Endlosschleife:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
#include <iostream>

using namespace std;

int main()
{
	char Auswahl = 'A';
	int x=0,y=0,z=0, x_sort=0,y_sort=0,z_sort=0;

	while(true)
	{
		switch(Auswahl)
		{
		case 'A':
		case 'a':
			cout << "1. Zahl: ";
			cin >> x;
			cout << "2. Zahl: ";
			cin >> y;
			cout << "3. Zahl: ";
			cin >> z;
			break;
//...
		case 'F':
		case 'f':
			return 0;
//evtl noch dafault
		}

		cout << "Startmenue" << endl;
		cout << "(A) Es sollen 3 Zahlen eingelesen werden" <<endl;
		cout << "(B) Zuletzt eingelesene Zahl ausgeben" <<endl;
		cout << "(C) Absteigend sortiert" << endl;
		cout << "(D) Mittelwert" << endl;
		cout << "(E) Median" << endl;
		cout << "(F) Beenden" << endl;
		cin >> Auswahl;
	}
}

Für heute bin ich dann mal weg Wink
Auf diesen Beitrag antworten »
profi

Aber mit while true macht er das zahlen einlesen ja auch irgendwie unendlich
mal , da stimmt doch was nicht oder?
Auf diesen Beitrag antworten »
Airblader

Es beendet sich eben dann, wenn man 'f' bzw. 'F' eingibt, da die return-Anweisung die Schleife dann einfach abbricht.
Auf diesen Beitrag antworten »
profi

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
#include <iostream>

using namespace std;

int main()
{

    char Auswahl = 'A';
     Auswahl = 'B';
    Auswahl = 'C';
     Auswahl = 'D';
     Auswahl = 'E';


    int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

    while(true){
    switch(Auswahl){


        case('A'):

        case('a'):


        cout << "1 Zahl" << endl;

        cin >> x;

        cout << "2 Zahl" << endl;

        cin >> y;

        cout << "3 Zahl" << endl;

        cin >> z;

        break;

        case('B'):

        case('b'):

        cout <<  x  << " " << y << " " << z << endl;

        break;

        case('C'):

        case('c'):

            int a;


            a = x_sort;


            if( a > y_sort && y_sort < z_sort && z_sort > a  ){

                a =y_sort;
            }

            cout << y_sort  <<  " "  << a  << " " << z_sort;

            break;

           case('D'):

           case('d'):

           cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3  <<endl;

           break;


    }

    cout<< "Startmenue" << endl;

    cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

    cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

    cout << "(C) Absteigend sortiert" << endl;

    cout << "(D) Mittelwert" << endl;

    cout << "(E) Beenden"  << endl;

    cin >> Auswahl;







    }
} 


Mein Programm sieht so aus .

Aber wenn ich c drücke sortiert er leider die Zahlen nicht.

Warum passiert das?
Auf diesen Beitrag antworten »
Airblader

code:
1:
2:
3:
4:
int a = x_sort; 
if( a > y_sort && y_sort < z_sort && z_sort > a ){
    a = y_sort; 
}


Erwartest du wirklich, dass eine Logik, welche die eingegebenen Zahlen nichtmal verwendet, funktioniert?

Da du C++-Methoden zum sortieren wohl nicht verwenden darfst/kannst, solltest du dir erstmal überlegen: Wie kannst du drei Zahlen algorithmisch sortieren?

Übrigens: Offenbar ist "case('d')" zwar gültige Syntax, aber untypisch. Man schreibt für die Fälle eigentlich nur "case 'd'", also ohne Klammern.
Auf diesen Beitrag antworten »
profi

IcH HABS mal versucht so zu sortieren , aber es funktioniert immer nochnicht:

#include <iostream>

using namespace std;

int main()
{

char Auswahl = 'A';
Auswahl = 'B';
Auswahl = 'C';
Auswahl = 'D';
Auswahl = 'E';


int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

while(true){
switch(Auswahl){


case('A'):

case('a'):


cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

break;

case('B'):

case('b'):

cout << x << " " << y << " " << z << endl;

break;

case('C'):

case('c'):


cout << "1 Zahl" << endl;

cin >> x_sort;

cout << "2 Zahl" << endl;

cin >> y_sort;

cout << "3 Zahl" << endl;

cin >> z_sort;



if( x_sort > y_sort ){

x_sort =y_sort;
}

if(y_sort > z_sort && x_sort > z_sort){

y_sort = z_sort;


}

cout << z_sort << endl;





break;

case('D'):

case('d'):

cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3 <<endl;

break;


}

cout<< "Startmenue" << endl;

cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;

cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;

cout << "(C) Absteigend sortiert" << endl;

cout << "(D) Mittelwert" << endl;

cout << "(E) Beenden" << endl;

cin >> Auswahl;







}
}

Was mache ich nun?
Auf diesen Beitrag antworten »
Airblader

Zitat:
Original von profi
Was mache ich nun?


Code-Tags verwenden. Augenzwinkern
Auf diesen Beitrag antworten »
Airblader

Da der Tag sich dem Ende zuneight, möchte ich (ausnahmsweise*) mal nicht so sein. Das ist also deine Logik:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
cout << "1 Zahl" << endl;
cin >> x_sort;
cout << "2 Zahl" << endl;
cin >> y_sort;
cout << "3 Zahl" << endl;
cin >> z_sort;

if( x_sort > y_sort ) {
    x_sort =y_sort;
}

if( y_sort > z_sort && x_sort > z_sort ) {
    y_sort = z_sort;
}

cout << z_sort << endl;


Der erste Block widerspricht gleich mal der Aufgabenstellung. Du sollst nicht Zahlen sortieren, die neu eingegeben werden, sondern die Zahlen, die zuvor eingegeben wurden (namentlich x, y und z).

Die Logik danach ist auch eher krumm. Ein Tipp: Wenn du dir einen Algorithmus überlegst, dann überprüfe ihn mit Zahlbeispielen. Auch nochmal gründlich über das Geschriebene nachdenken hilft oft – in deiner Logik wird der Wert von x_sort zum Beispiel ersatzlos überschrieben. Wenn man drei Zahlen sortieren will und eine unwiderruflich überschreibt, riecht das nicht nach einem Fehler? Augenzwinkern

Gehen wir also mal davon aus, dass der Benutzer x, y und z eingegeben hat und wir diese Zahlen aufsteigend sortieren wollen. Gehen wir auch mal davon aus, dass wir eine Funktion min(a, b, c) und max(a, b, c) haben (was sie jeweils tun sollte klar sein). Dann können wir wie folgt sortieren:

code:
1:
2:
3:
x_sort = min(x, y, z);
z_sort = max(x, y, z);
y_sort = x + y + z - x_sort - z_sort;


An der Stelle ist es essentiell, dass du dir die Zeit nimmst zu verstehen, wieso das klappt.

Supi – die Zahlen sind sortiert! Jetzt haben wir nur noch das Problem, dass wir diese min- und max-Funktion brauchen. Da ich davon ausgehe, dass ihr die vordefinierten Funktionen nicht nutzen dürft, müssen wir uns sowas eben selber basteln. Sagen wir mal, wir wollen min(x,y) bestimmen und in x_sort speichern. Das könnte so gehen:

code:
1:
2:
3:
4:
5:
if( x < y ) {
    x_sort = x;
} else {
    x_sort = y;
}


Ich überlasse es dir, dies auf drei Zahlen (für min(x, y, z)) auszuweiten, denn das brauchen wir schließlich. Natürlich gibt es auch andere Wege, die Zahlen zu sortieren.

*) In Zukunft bitte auf die korrekte Darstellung achten. Wer will, dass andere sich Zeit nehmen, zu helfen, sollte sich die Zeit nehmen, die Frage vernünftig zu stellen. Augenzwinkern
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »