Anfänger Problem (Konsolen-Programm lässt sich nicht wie gewünscht beenden)



  • float schrieb:

    Mit dem cahr kann es nicht funktionieren.

    Switch-Variablen müssen integrale Konstanten sein, was bei einem char ebenso erfüllt ist. Ein char wird 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 true zurück, wenn das Programm weiterlaufen soll und false , 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 true zurück, wenn das Programm weiterlaufen soll und false , 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 Funktion auswahlroutine() gehandhabt. Und falls diese false zurü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 schleife immer true

    also 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!


Anmelden zum Antworten