Switch case C++ |
profi unregistriert
|
|
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
|
|
13.04.2013 19:17 |
|
|
|
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
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 19:25 |
|
|
profi unregistriert
|
|
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?
|
|
13.04.2013 19:30 |
|
|
|
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
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 19:36 |
|
|
profi unregistriert
|
|
#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?
|
|
13.04.2013 19:48 |
|
|
|
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)
//... |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 19:57 |
|
|
profi unregistriert
|
|
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?
|
|
13.04.2013 20:04 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 20:09 |
|
|
profi unregistriert
|
|
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?
|
|
13.04.2013 20:18 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
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.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
13.04.2013 20:23 |
|
|
|
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';
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 20:24 |
|
|
profi unregistriert
|
|
Wie mache ich das in code tags?
|
|
13.04.2013 20:24 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 20:28 |
|
|
profi unregistriert
|
|
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 ?
|
|
13.04.2013 20:38 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 20:45 |
|
|
|