Anfänger Problem (Konsolen-Programm lässt sich nicht wie gewünscht beenden)
-
Normalerweise sehen Switch-Blöcke so aus (dabei gibt es keine geschweiften Klammern):
switch (Konstante) { case 1: case 2: TuEtwas(); // für die Fälle 1 und 2 break; // damit nächste Anweisungen nicht ausgeführt werden case 3: TuEtwasAnderes(); // für Fall 3 break; default: // für alle anderen Fälle TuNichts(); }Da bei den Fällen 'b' und 'B' das Gleiche passiert, kannst du sie zusammenfassen (siehe oben bei Fall 1 und 2). Aber bei sowenig Anweisungen kannst du eigentlich auch eine If-Else-Verzweigung durchführen.
Hast du jetzt eine Schleife eingebaut, anstattmain()aufzurufen?Und statt
n = true; return n;kannst du auch schreiben:
return true;
-
Du musst eine int-Variable für den Case-Block nehmen. Dannach fragst du den Inhalt 1, 2, 3 usw. ab und kannst Anweisungen setzen.
Mit dem cahr kann es nicht funktionieren.
-
float schrieb:
Mit dem cahr kann es nicht funktionieren.
Switch-Variablen müssen integrale Konstanten sein, was bei einem
charebenso erfüllt ist. Eincharwird nur von den Ausgabeströmen als Zeichen ausgegeben, ist jedoch eine Ganzzahl.
-
In den Klammern von main gehören auch keinen Parameter. Du musst nichts übergeben!
int main (){
...
-
float schrieb:
In den Klammern von main gehören auch keinen Parameter. Du musst nichts übergeben!
Wie kann er dann das Problem mit dem char lösen? Dann darf er also keine Buchstaben einlesen oder muss den ASCII-Code abfragen?
-
Also ich habe nun main ohne inhalt in den klammern und den case block entsprechend geändert:
case ('B'): case ('b'): return true; break;Allerdings wieder ohne erfolg. Das programm beendet sich imemrnoch nicht.

Nexus Hast du jetzt eine Schleife eingebaut, anstatt main() aufzurufen?
Was meinst du mit einer schleife ich verstehe das nun so das ich mit return true aus der funktion nach main zurückkehre.
-
Gibt die Funktion
truezurück, wenn das Programm weiterlaufen soll undfalse, wenn man es beenden will? Falls ja, kannst du das folgendermassen machen:bool laufend = true; while (laufend) { // ... laufend = auswahlroutine(); // wenn Funktion false zurückgibt, wird Schleife verlassen }Falls nein, wie sieht dein Programm jetzt aus, was willst du genau tun und wo liegt das Problem?
-
Nexus schrieb:
Gibt die Funktion
truezurück, wenn das Programm weiterlaufen soll undfalse, wenn man es beenden will? Falls ja, kannst du das folgendermassen machen:bool laufend = true; while (laufend) { // ... laufend = auswahlroutine(); // wenn Funktion false zurückgibt, wird Schleife verlassen }Falls nein, wie sieht dein Programm jetzt aus, was willst du genau tun und wo liegt das Problem?

Es funktioniert
Ich könnt dich knutschen. Ich muss zwar 2 mal b + Enter eingeben aber wenigstens lässt es sich beenden
total super!
Vielen Dank.
-
SchmerzKeks schrieb:
Ich muss zwar 2 mal b + Enter eingeben aber wenigstens lässt es sich beenden
total super!Willst du das nicht auch noch ausbessern?

Das sollte eigentlich nicht passieren... Die Eingabe von 'b' wird ja in der Funktionauswahlroutine()gehandhabt. Und falls diesefalsezurückgibt, wird die Schleife verlassen und das Programm beendet. Wahrscheinlich ist ein Fehler innerhalb der Funktion vorhanden...
-
Das Problem hat sich von selbst gelöst. nachdem ich Dev cpp neugestartet hatte. nun beendet sich das Programm nach einmaliegem drücken von b
Ich bin echt unglaublich happy. 
-
Freut mich für dich

Ach ja, mit der Zeit würde ich mir unbedingt einen Umstieg auf eine modernere Entwicklungsumgebung als Dev-C++ überlegen (z.B. auf die kostenlose Express-Version von Microsoft Visual C++ 2008). Besonders bei grösseren Projekten helfen einem eingebaute Tools enorm bei der Übersicht. Am Anfang ist es jedoch ein bisschen nachteilig, weil für jede kleine Anwendung ein neues Projekt erstellt werden muss.
-
int main(int n) { char programmwahl; bool schleife = n;macht wahrscheinlich (bin gerad nicht ganz sicher) nicht das, was es soll ^^
main wird aufgerufen:main (1, "Pfad\\Dateiname_der_exe.exe") du bekommst nur main (1)und wenn man iwas übergibt statt der 1 halt ne 2 oder so
also is schleifeimmertruealso schreib
int main () { //... }für deine schleife kannste das au so machen:
#include <iostream> int main () { do { } while (auswahlroutine ()); }bool /*again*/ auswahlroutine () { char eingabe (0); std::cout << "..." << std::endl; std::cin >> eingabe; system("cls"); //würd ich weglassen - wenn es stört, machste halt paar zeilenumbrüche hin?! switch (programmwahl) { case ('b'): case ('B'): return false; case ('_'): //weiter oder so... return true; default: { cout << endl << endl; cout << "\tAnscheinend haben Sie sich vertippt.\r\n" << endl << "\tBitte entscheiden Sie sich fuer eine der Auswahlmoeglichkeiten" << endl << "\t\t {b, B} = beenden, ....." << "\tund bestaetigen Sie diese mit eingabe von ENTER:\r\n" << endl; return auswahlroutine; } } }bb : )
-
Nexus schrieb:
Freut mich für dich

Ach ja, mit der Zeit würde ich mir unbedingt einen Umstieg auf eine modernere Entwicklungsumgebung als Dev-C++ überlegen (z.B. auf die kostenlose Express-Version von Microsoft Visual C++ 2008). Besonders bei grösseren Projekten helfen einem eingebaute Tools enorm bei der Übersicht. Am Anfang ist es jedoch ein bisschen nachteilig, weil für jede kleine Anwendung ein neues Projekt erstellt werden muss.
Also Microsoft Visual könnte ich sogar als vollversion von der schule bekommen die sind in soeinem Microsoft Partnerprogram. Wir lernen allerdings auf Dev-cpp daher habe ich das bisher benutzt, werde aber mal Visual ausprobieren. Danke für den Tip.

unskilled schrieb:
std::cout << "..." << std::endl; std::cin >> eingabe;Dir auch erstmal danke für deine Hinweise

Den gequoteten abschnitt haben wir in der schule leider noch nicht behandelt daher lass ich das erstmal lieber weg.
-
faszinierend, ich habe gerade mal die Visual Express 2008 Version getestet und meinen Quelltext reinkopiert. Der Debugger hat mit 8 Fehler und 14 Warnungen in knapp 300 Zeilen Quelltext ausgespuckt die Dev-cpp einfach "ignoriert" hat. Konnte die fehler relativ problemlos beseitigen habe nun aber noch eine Warnungen die ich leider nciht weg bekomme. Das Programm läuft zwar aber die Warnung hinterlässt einen fahlen Beigeschmack bei mir.
Die warnung lautet:
(277) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
Ich kann aber niergends das "double" entdecken

float querschnittsberechnung (float temperatur, float laenge, float leistung, float Inenn) { float spezifischerleitungswiederstand, querschnittergebnis, quer; Inenn = leitungsschutzorganberechnung (leistung); /*Zeile 277 in meinem Quelltext --->*/ spezifischerleitungswiederstand = 0.0178 * (1 + (0.0038) * (temperatur - 20)); querschnittergebnis = (spezifischerleitungswiederstand * 2 * laenge * Inenn * 100) / (3*230); if (querschnittergebnis < 1.5) { quer = 1.5; return quer; } else if (querschnittergebnis < 2.5) { quer = 2.5; return quer; } else //...etc.Bin wiedermal sehr dankbar für Hilfe!

-
Wenn du etwas mit .24 angibst, wird das als double genommen, wenn du float willst, musst du .24f machen.
-
Hervorragend
nun bin ich fehlerfrei 
Vielen Dank!