Problem: Brauche Hilfe bei Schleife!!



  • euhm ja und wo genau muss das hin? 🙂

    also ich will eigentlich nur in jeder if anweisung wo die berechnung stattfindet danach noch sowas wie cout << "möchten sie nocjmal rechnen?";
    cin >> eingabe;
    if (eingabe = ja)
    goto anfang des programs
    else
    quit

    so in etwa.... und im menü möchte ich die funktion haben das man 1,2,3,4eingibt man in die jeweilige berechnung kommt (was ja auch gut funktioniert) nur sobald man was anderes eingibt das dann der satz kommt bitte nur 1-4 eingebenm und man die möglichkeit hat nochmal eine eingabe vorzunehmen



  • char jn;//sorry, mir fällt gerade kein besserer Name ein
    do
    {
      //Auswahlmöglichkeiten ausgeben
      int auswahl;
      cin>>auswahl;
      while( auswahl>4 || auswahl<1 )
      {
        cout<<auswahl<<" ist nicht möglich, bitte neu wählen:";
        cin>>auswahl;
      }
      switch(auswahl)
      {
      ...
      }
    
      cout<<"Nochmal rechnen? (j/n)";
      cin>>jn;
    }
    while(toupper(jn)=='J');
    

    (die innere while-Schleife fängt Eingaben außerhalb des gültigen Bereiches ab, die äußere do-while-Schleife erledigt die "nochmal?"-Überprüfung)



  • andy_cux schrieb:

    also ich will eigentlich nur in jeder if anweisung wo die berechnung stattfindet danach noch sowas wie cout << "möchten sie nocjmal rechnen?";
    cin >> eingabe;
    if (eingabe = ja)
    goto anfang des programs
    else
    quit

    so in etwa.... und im menü möchte ich die funktion haben das man 1,2,3,4eingibt man in die jeweilige berechnung kommt (was ja auch gut funktioniert) nur sobald man was anderes eingibt das dann der satz kommt bitte nur 1-4 eingebenm und man die möglichkeit hat nochmal eine eingabe vorzunehmen

    Ach so, dann hab ich dich doch falsch verstanden. Also das goto solltest du lieber lassen und auch das mit einer Schleife machen, aber wenn du es unbedingt mit goto machen willst, dann etwa so.

    if(eingabe == "ja")
    {
      goto anfang;
    }
    

    und da wo das Programm dann "hinspringen" soll schreibst du:

    anfang:
    

    und das mit dem Menue machst du in etwa so

    int auswahl = 1; 
    while(auswahl > 0 || auswahl < 5)
    {
    cout << "\t\t\t************************************\n"; 
    cout << "\t\t\t* Berechnungstool von U,R,I und P *\n"; 
    cout << "\t\t\t************************************\n"; 
    cout << "\t\t\t..........: by A. Maiwald :.........\n" << endl; 
    cout << "\n\n\t\t\t------------------------------------\n"; 
    cout << "\t\t\t| (1) U berechnen |\n"; 
    cout << "\t\t\t| (2) R berechnen |\n"; 
    cout << "\t\t\t| (3) I berechnen |\n"; 
    cout << "\t\t\t| (4) P berechnen |\n"; 
    cout << "\t\t\t------------------------------------\n"; 
    cout << "\n\n\t\t\tTreffen Sie Ihre Auswahl: "; 
    cin >> auswahl; 
    }
    


  • CStoll schrieb:

    char jn;//sorry, mir fällt gerade kein besserer Name ein
    do
    {
      //Auswahlmöglichkeiten ausgeben
      int auswahl;
      cin>>auswahl;
      while( auswahl>4 || auswahl<1 )
      {
        cout<<auswahl<<" ist nicht möglich, bitte neu wählen:";
        cin>>auswahl;
      }
      switch(auswahl)
      {
      ...
      }
    
      cout<<"Nochmal rechnen? (j/n)";
      cin>>jn;
    }
    while(toupper(jn)=='J');
    

    (die innere while-Schleife fängt Eingaben außerhalb des gültigen Bereiches ab, die äußere do-while-Schleife erledigt die "nochmal?"-Überprüfung)

    könntest du mir das vllt. mal direkt in meinem quelltext farbig zeigen wo was reinmuss? wär ganz gut damit ich das mal sehe

    @ eek goto soll nicht gut sein hab ich gehört deshalb will ich es auch mit einer schleife machen ...
    zumal deine menü schleife nicht funktioniert *g* dann zeigt er mir nur immer das menü aufs neue an... geht aber nicht mehr in die if anweisung und wenn ich was anderes angebe als 1-4 dann wiederholt er sich unendlich *g*

    so wie cstoll es gemacht hat! nur muss es irgendwie farbig in meinem quelltext sehen sonst rall ich es nicht glaub ich *g*



  • andy_cux schrieb:

    @ eek goto soll nicht gut sein hab ich gehört deshalb will ich es auch mit einer schleife machen ... so wie cstoll es gemacht hat!

    Hab ich doch gesagt



  • ja hab gehört soll unschön sein und veraltet...

    hm bin nu immer noch nicht weiter... wer ist so lieb und bindet das mal in meinen code farbig ein? so das es funktioniert? und ich sehen kann wie sowas geht? 😞



  • andy_cux schrieb:

    könntest du mir das vllt. mal direkt in meinem quelltext farbig zeigen wo was reinmuss? wär ganz gut damit ich das mal sehe

    Das muß fast um dein gesamtes Programm herumgebaut werden:

    int main()
    {
      float U,R,I,P;
      int auswahl;
      //neu {
      char jn;
      do
      {
      //neu }
        cout << "\t\t\t************************************\n";
        ...
        cout << "\n\n\t\t\tTreffen Sie Ihre Auswahl: "; 
        cin >> auswahl;
        //neu {
        while( auswahl>4 || auswahl<1 )
        {
          cout<<auswahl<<" ist nicht möglich, bitte neu wählen:";
          cin>>auswahl;
        }
        //neu }
        if(auswahl==1)
        {
        ...
        ...
          cout <<"\t\t\tDie Leistung betraegt: " << leistung(U,I) << " Watt\n" <<endl; 
        } 
        //weg: else 
        //weg:   cout << "Bitte geben Sie eine Zahl 1-4 ein";
        //neu {
        cout<<"Nochmal rechnen? (j/n)";
        cin>>jn;
      }
      while(toupper(jn)=='J');
      //neu }
    
      cin.get();//das ist besser als system("PAUSE");
      return 0;
    }
    

    (die Teile zwischen "//neu {" und "//neu }" müsstest du jeweils ergänzen)

    PS: Übrigens wäre ein switch() eleganter als deine if-elseif-Kaskade.



  • juchu funktioniert! nicht schlecht! ganz dickes lob 🙂 soweit blick ich da jetzt durch aber was hat das hier aufsich

    while(toupper(jn)=='J');

    was ist toupper?

    und was ist switch()? 🙂

    und sehe grad wenn man buchstaben eingibt beim menü dreht er durch 🙂 d.h. buchstaben muss man auch irgendwie auschließen aber das am rande...

    achja... und wie kann ich den bildschirminhalt löschen nachdem man nochmal neu rechnen möchte? gibts da son befehl wie clearscreen oder so? 🙂



  • andy_cux schrieb:

    while(toupper(jn)=='J');

    was ist toupper?

    man: toupper wandelt ein Zeichen in Großbuchstaben um (du kannst stattdessen auch auf "jn=='J'||jn=='j'" testen).

    und was ist switch()? 🙂

    Schau mal in dein C(++)-Lehrbuch, dort steht sicher eine ausführliche Erklärung.

    und sehe grad wenn man buchstaben eingibt beim menü dreht er durch lol

    Da fehlt noch die Fehlerabfrage für cin (wenn du etwas nicht interpretierbares eingibst, setzt der ein Fehlerflag und verweigert die Zusammenarbeit). Einfachste Lösung wäre es wohl, auswahl als char zu deklarieren und auf den Bereich '1' bis '4' zu vergleichen (Anführungszeichen nicht vergessen, sonst wartet das Programm auf die Eingabe irgendwelcher Steuerzeichen).



  • merci funktioniert mit der char deklaration perfekt! und switch schau ich gleich mal nach 😉 wenn du mir jetzt noch den befehl zum leeren des bildschirms sagst bin ich auch ruhig 🙂 zufällig was mit clearscreen? 🙂



  • andy_cux schrieb:

    wenn du mir jetzt noch den befehl zum leeren des bildschirms sagst bin ich auch ruhig 🙂 zufällig was mit clearscreen? 🙂

    Im ANSI C++ gibt es dafür keinen Befehl, aber die meisten Compiler bieten eigene Funktionen dafür an, die dann z.B. clrscr() oder clearscreen() heißen können - da mußt du mal in der Compiler-Doku nachschauen.

    PS: Und im äußersten Notfall geht auch "system("cls");" (aber bitte nur anwenden, wenn's gar nicht anders geht)


Anmelden zum Antworten