Meine erste Klasse läuft nur mit Schleife Probleme
-
Ich glaub die Schleife soll da nicht enden. Und ich denke auch, dass genau das dann das Problem ist: die ganzen breaks, da erkenn ich jetzt nicht, ob das nun die Schleife oder nur die switch-Anweisung gebreaked (was fürn Wort) werden soll. In der Schleife das switch beenden wird etwas schwerer
-
In einer Schleife kann man ja mit break; auch die Schleife beenden,
woher soll ich das wissen
-
#include "stdafx.h" using namespace System; ref class TV_Klasse { Int32 an_aus; Int32 Programm; Int32 Ton; public: Void init(Int32 zustand); Void programm(Int32 kanal); Void ton(Int32 aendern); Void ausgabe(); }; Void TV_Klasse::init(Int32 zustand) { if (zustand != 0) { an_aus = 1; } else { an_aus = 0; } Programm = 1; Ton = 5; } Void TV_Klasse::programm(Int32 kanal) { if ((Programm + kanal) > 1) { Programm = Programm + kanal - 1; } else { Programm = Programm - kanal; } } Void TV_Klasse::ton(Int32 aendern) { if (aendern > 5) { Ton = Ton + aendern - 5; } else { Ton = Ton - aendern; } } Void TV_Klasse::ausgabe() { Console::WriteLine("\n\nDas Gerät hat den Zustand {0} ",an_aus); Console::WriteLine("Aktives Programm {0}",Programm); Console::WriteLine("Die Lautsärke ist auf {0} \n\n\n",Ton); } int main(array<System::String ^> ^args) { TV_Klasse^ tivi; tivi = gcnew TV_Klasse; Int32 auswahl, x, z, schleife; schleife = 0; Console::WriteLine("Vor dem Einschalten.\n\n"); tivi -> ausgabe(); Console::WriteLine("Gerät einschalten: 1"); Console::WriteLine("Gerät ausschalten: 0\n"); auswahl = Console::Read(); Console::ReadLine(); switch (auswahl) { case '1': x = 1; tivi -> init(x); Console::WriteLine("Nach dem Einschalten \n"); tivi ->ausgabe(); while (schleife >= 0) { Int32 y; Console::WriteLine("Was möchten Sie tun?\n"); Console::WriteLine("Programm ändern: 1"); Console::WriteLine("Ton andern: 2"); Console::WriteLine("Gerät ausschalten: 0\n\n"); y = Convert::ToInt32(Console::Read()); Console::ReadLine(); switch (y) { case '1': Int32 kanal, i; Console::WriteLine("ARD: 1"); Console::WriteLine("ZDF: 2"); Console::WriteLine("NDR: 3"); Console::WriteLine("RTL: 4\n"); /*Console::WriteLine("Ausschalten: 0\n");*/ kanal = Convert::ToInt32(Console::Read()); switch (kanal) { case '1': i = 1; tivi -> programm(i); break; case '2': i = 2; tivi -> programm(i); break; case '3': i = 3; tivi -> programm(i); break; case '4': i = 4; tivi -> programm(i); break; }// 3. Switch is zu ende break;// Case 1 ist zu ende } // 2. Switch is zu ende } //Ich glaube, die Schleife sollte hier enden, oder? break;//Damit is Case 1 zu ende case '2': z = 0; Console::WriteLine("Um die Lautstärke zu änder eine Zahl eingeben.\n"); z = Convert::ToInt32(Console::ReadLine()); tivi -> ton(z); break; case '0': z = 0; tivi -> init(z); break; default: Console::WriteLine("Falsche Auswahl."); } // 1. Switch is zu ende tivi -> ausgabe(); /* Das kann man vergessen // Wozu das denn? Es gingen doch schon alle Klammern zu //}/*while(schleife != 0);*/ //} */ Console::ReadKey(); return 0; }
Kommentier das Ganze bitte aus, sag uns was genau missglückt is
und meld dich wieder, ok?
Ich check den Code überhaupt nicht.Weißt du in 4 Monaten noch, was das Ganze bewirken soll??
-
Hey virusscript24!
Nein, die Schleife soll schon dort enden, wo ich die Klammer gesetzt habe. Setze ich sie dort, wo Du sie mit grün interpretiert hast, dann will das Programm ständig auch den Ton ändern.
Ich möchte es so, das nur die drei Abfragen als Wiederholung dort auftauchen aber
das Programm beim eingeben von Null 1. Den Zustand ein auf aus schaltet und
2. Das Programm beendet oder die erste Abfrage Einschalten oder Ausschalten erscheint.Mein Gedanke geht von einer wirklichen Fernbedienung aus. Die Fragt auch nicht Ständig danach den Ton zu ändern und wenn man Power drückt, dann ist der Fernseher entweder an oder aus.
Gruß und lieben Dank
champman
-
Oh, sry, aber ich bin aus dem Quelltext nicht schlau geworden...
Tut mir leid, aber könntest du bitte das ganze kommentieren & uns die Fehler erklären?
Ich wäre dir sehr dankbar
-
Hallo
Natürlich! mach ich glatt. Zusätzlich die Bildschirmausgabe.
#include "stdafx.h" using namespace System; ref class TV_Klasse // Klasendefinition { Int32 an_aus; // Klassenelemente Int32 Programm; Int32 Ton; public: Void init(Int32 zustand); // Methoden der Klasse (Bekanntmachung) Void setprogramm(Int32 kanal); Void setton(Int32 aendern); Void ausgabe(); }; Void TV_Klasse::init(Int32 zustand) //Methode zur Initialisierung { if (zustand != 0) an_aus = 1; else an_aus = 0; Programm = 1; Ton = 5; } Void TV_Klasse::setprogramm(Int32 kanal) // Methode zum Programm ändern { Programm = kanal; } Void TV_Klasse::setton(Int32 aendern) // Methode um Ton zu ändern { Ton = aendern; } Void TV_Klasse::ausgabe() //Methode für die Ausgabe der Veränderung { Console::WriteLine("\n\nDas Gerät hat den Zustand {0} ",an_aus); Console::WriteLine("Aktives Programm {0}",Programm); Console::WriteLine("Die Lautsärke ist auf {0} \n\n\n",Ton); } int main(array<System::String ^> ^args) { TV_Klasse^ tivi; tivi = gcnew TV_Klasse; Int32 auswahl, x, z; Int32 y = 0; Console::WriteLine("Vor dem Einschalten.\n\n"); // Erster Aufruf der Methode Ausgabe tivi -> ausgabe(); // um an zu zeigen das Gerät aus ist. Console::WriteLine("Gerät einschalten: 1"); // Einschalten des Gerätes Console::WriteLine("Gerät ausschalten: 0\n"); // Ausschalten des Gerätes auswahl = Console::Read(); Console::ReadLine(); switch (auswahl) { case '1': // Case-Zweig zum 1 Einschalten, da nur dann Änderungen möglich x = 1; tivi -> init(x); // Veränderung bei an_aus Console::WriteLine("Nach dem Einschalten \n"); tivi ->ausgabe(); // Ausgabe zeigt Änderungsstatus auf Eingeschaltet while (y != 3) // Beginn der Schleife für die Auswahl zum Ton oder Programm ändern { Console::WriteLine("Was möchten Sie tun?\n"); Console::WriteLine("Programm ändern: 1"); Console::WriteLine("Ton andern: 2"); Console::WriteLine("Gerät ausschalten: 0\n\n"); //Hier soll das Programm anders Funktionieren y = Convert::ToInt32(Console::Read()); // Erläuterung bei Bildschirmausgbe Console::ReadLine(); switch (y) // Programm ändern { case '1': Int32 kanal, i; Console::WriteLine("ARD: 1"); // Auswahl der Kanäle Console::WriteLine("ZDF: 2"); Console::WriteLine("NDR: 3"); Console::WriteLine("RTL: 4\n"); kanal = Convert::ToInt32(Console::Read()); Console::ReadLine(); switch (kanal) // Die Auswertungen der Kanalauswahl { // damit Methode setprogramm auch case '1': // nach dem eingegebenen Kanal umschaltet i = 1; tivi -> setprogramm(i); break; case '2': i = 2; tivi -> setprogramm(i); break; case '3': i = 3; tivi -> setprogramm(i); break; case '4': i = 4; tivi -> setprogramm(i); break; } // Kanal Auswahl ende break; // stop von Kanal Auswahl case '2': // Hir beginnt Zweit Ton ändern im Auswahlmenü nach Wihle z = 0; Console::WriteLine("Um die Lautstärke zu änder eine Zahl eingeben.\n"); z = Convert::ToInt32(Console::ReadLine()); tivi -> setton(z); // damit Methode setton geändert wird break; case '0': // Hier wird ein_aus zwar auf Null gesetzt // aber Programm nicht beendet z = 0; tivi -> init(z); break; default: Console::WriteLine("Falsche Auswahl."); } tivi -> ausgabe(); // Ausgabe nach Änderungen oder Änderung } } Console::ReadKey(); return 0; }
Jetzt die Ausgabe:
Vor dem Einschalten. (Dies Ausgabe ist OK)
Das Gerät hat den Zustand 0
Aktives Programm 0
Die Lautsärke ist auf 0Gerät einschalten: 1 (Das ist OK)
Gerät ausschalten: 01
Nach dem Einschalten ( Auch OK)
Das Gerät hat den Zustand 1
Aktives Programm 1
Die Lautsärke ist auf 5Was möchten Sie tun? ( OK )
Programm ändern: 1
Ton andern: 2
Gerät ausschalten: 01
ARD: 1 ( Immer noch OK )
ZDF: 2
NDR: 3
RTL: 42
Das Gerät hat den Zustand 1 ( Ausgabe OK )
Aktives Programm 2
Die Lautsärke ist auf 5Was möchten Sie tun? ( Ist auch OK)
Programm ändern: 1
Ton andern: 2
Gerät ausschalten: 02
Um die Lautstärke zu änder eine Zahl eingeben. (Wieder OK)
3
Das Gerät hat den Zustand 1 (Diese Ausgabe ist auch OK)
Aktives Programm 2
Die Lautsärke ist auf 3Was möchten Sie tun? (Nochmal OK, weil noch nicht ausgeschaltet)
Programm ändern: 1
Ton andern: 2
Gerät ausschalten: 00
Das Gerät hat den Zustand 0 (Als Kontrollausgabe OK)
Aktives Programm 1
Die Lautsärke ist auf 5Was möchten Sie tun? ( Nicht mehr OK )
Programm ändern: 1 ( Hier möchte ich entweder dass das Programm )
Ton andern: 2 ( schließt oder das Menü zum Ein und Ausschalten )
Gerät ausschalten: 0 ( wieder erscheint. z. B. 0 = ende oder soHoffe das es jetzt verständlicher ist und Du mein Problem besser verstehst.
Herzlichen Dank
champman
-
champman schrieb:
Was möchten Sie tun? ( Nicht mehr OK )
Programm ändern: 1 ( Hier möchte ich entweder dass das Programm )
Ton andern: 2 ( schließt oder das Menü zum Ein und Ausschalten )
Gerät ausschalten: 0 ( wieder erscheint. z. B. 0 = ende oder soWenn ich das richtig verstehe, willst du an dieser Stelle
entweder zum Programmende oder zum ein-/ausschalte menü kommen.Das könntest du mit goto machen. Manchmal ganz praktisch,
aber sehr sparsam einsetzen.int main(){ while(blabla){ if(blabla){ goto ende; // Um zum Ende zu Springen } } getchar(); ende: // Um Sprungmarke zu setzen return 0; }
Ich hoffe, das war das was du gesucht hast...
Lg virusscript24
-
Hey virusscrip24
Habe es mit "Label und goto" hinbekommen. Ist zwar nicht die eleganteste Lösung, aber funktioniert zu mindest.
Großen Dank
champman
-
Was der Code macht, weiß ich jetzt, aber ich versteh nicht, was das bringen soll
Hat das Ganze nen Konsolenoutput oder Winforms?
-
Hey
Nein, war eher als Hinweis was in mir so gedacht habe.
lempy