Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: If-Else Frage

  1. #11
    Fortgeschrittener
    Registriert seit
    30.09.2007
    Beiträge
    35

    Standard

    Natürlich dürfen sie compiliert werden, man kann genauso auch Anweisungen hinter einem if ausführen.
    Yep, I fap to Reese Witherspoone. :_D

  2. #12
    Bad Times Virus
    Registriert seit
    04.03.2008
    Beiträge
    506

    Standard

    ich frag mich nur wieso du so viele libraries benutzt
    iostream reicht doch... math brauchst auch nich du rechnest ja nur mit + - / und *

  3. #13
    Anfänger
    Registriert seit
    03.03.2008
    Beiträge
    25

    Standard Re: If-Else Frage

    Zitat Zitat von Pr1Me
    Hallo,

    Mein Problem ist, dass wenn ich Rechenart 1,2,3 wähle, nach dem
    Ausgeben des Ergebnisses immer das else auch noch ausgegen wird.
    Else sollte doch nur ausgegeben werden, wenn man eine falsche Eingabe tätigt....
    Bei Rechenart 4 wird das Else nicht ausgegeben.

    Und noch eine kleine Fragen, wenn man mit einer Rechnung fertig ist, würd ich gerne wieder zum Anfang der Codes springen, dass der Benutzer wieder von vorne anfangen kann, ist das Möglich?

    Mfg.
    So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlich
    Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:

    Source:

    Anfang:;

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }
    Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an:

    1) Bei der ersten frage ich zuerst ab, ob eine 1 ODER eine 2 ODER eine 3 ODER eine 4 eingegeben wurde. Ist dich nicht der Fall wechselt er zum else, ist dies der Fall, schaut er nun genau hin, was eingegeben wurde.

    Source:

    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {


    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }
    2) Bei meiner 2ten Möglichkeit gehe ich "besser" bzw. übersichtlicher vor. Ich benutze die switch-case Anwendung. Mit dem Befehl "switch ( Die zu prüfende Variable )" kannst du bestimmen, welche Variable überhaupt abgeprüft wird. Danach kommen in geschweifte Klammern die cases (beliebig viele mögliche Fälle + ein default Fall).


    Source:

    switch (rezeichen)
    {

    case 1:

    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    break;


    case 2:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    break;


    case 3:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    break;


    case 4:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    break;

    default:
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    break;
    }
    So nun komme ich zu deiner Frage, wie man wieder zum Anfang des Programmes gelangen kann. Auch dazu gibt es zahllose Varianten, aber ich erkläre dir hier jetzt mal die einfache goto-Variante, die für einfache, kleinere Projekte geeignet ist, jedoch nicht für größere und die Variante, mit einer Schleife.

    1) Goto:

    "Name":;
    goto "Name";

    Mit diesen einfachen Befehlen kann man eigentlich im ganzen Codeblock rumspringen
    Ich warne hiervor aber noch einmal, dies ist bei größeren Projekten nicht gut, da man damit jegliche Absicherungen die einen C++ bietet ignoriert!

    Source:

    Anfang:;


    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }



    char achegal;
    cout << "Wollen sie das ganze nochmal wiederholen? (j/n)" << endl;
    cin >> achegal;

    if (achegal == 'j') goto Anfang;

    2) Schleifen:

    Es gibt unterschiedliche Typen von Schleifen, einmal die while(do-while) - Schleife und die for - Schleife. Eine Schleife arbeitet im Prinzip einfach, sie prüft etwas ab, und solange dies nicht eintrifft, fängt sie von vorne an und es passiert etwas ( wenn nichts passiert, würde die Schleife ja immer wieder von vorne Anfangen -> eine Endlosschleife).

    Source:


    do
    {


    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }




    char Anfang;
    cout << "Wollen sie nochmal von Vorne beginnen? (j/n)" << endl;
    cin >> Anfang;

    } while ( Anfang == 'j')


    So jetzt habe ich genug geschrieben. Wenn du diesbezüglich noch was Wissen möchtest, kannst du mich ja anschreiben. Hoffe aber, ich habe es verständlich erklärt

    MfG Blood

    Added after 35 seconds:

    Zitat Zitat von Pr1Me
    Hallo,

    Mein Problem ist, dass wenn ich Rechenart 1,2,3 wähle, nach dem
    Ausgeben des Ergebnisses immer das else auch noch ausgegen wird.
    Else sollte doch nur ausgegeben werden, wenn man eine falsche Eingabe tätigt....
    Bei Rechenart 4 wird das Else nicht ausgegeben.

    Und noch eine kleine Fragen, wenn man mit einer Rechnung fertig ist, würd ich gerne wieder zum Anfang der Codes springen, dass der Benutzer wieder von vorne anfangen kann, ist das Möglich?

    Mfg.
    So als Weihnachtsgeschenk erkläre ich dir deinen Fehler mal ausführlich
    Die Else Abfrage gilt immer nur zur Vorherigen If Abfrage, ich hab beide mal Rot Markiert in deinem Post:

    Source:

    Anfang:;

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }
    Dies könntest du mit 2 Sachen umgehen. Beide Lösungen biete ich dir jetzt hier mal an:

    1) Bei der ersten frage ich zuerst ab, ob eine 1 ODER eine 2 ODER eine 3 ODER eine 4 eingegeben wurde. Ist dich nicht der Fall wechselt er zum else, ist dies der Fall, schaut er nun genau hin, was eingegeben wurde.

    Source:

    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {


    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }
    2) Bei meiner 2ten Möglichkeit gehe ich "besser" bzw. übersichtlicher vor. Ich benutze die switch-case Anwendung. Mit dem Befehl "switch ( Die zu prüfende Variable )" kannst du bestimmen, welche Variable überhaupt abgeprüft wird. Danach kommen in geschweifte Klammern die cases (beliebig viele mögliche Fälle + ein default Fall).


    Source:

    switch (rezeichen)
    {

    case 1:

    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    break;


    case 2:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    break;


    case 3:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    break;


    case 4:
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    break;

    default:
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    break;
    }
    So nun komme ich zu deiner Frage, wie man wieder zum Anfang des Programmes gelangen kann. Auch dazu gibt es zahllose Varianten, aber ich erkläre dir hier jetzt mal die einfache goto-Variante, die für einfache, kleinere Projekte geeignet ist, jedoch nicht für größere und die Variante, mit einer Schleife.

    1) Goto:

    "Name":;
    goto "Name";

    Mit diesen einfachen Befehlen kann man eigentlich im ganzen Codeblock rumspringen
    Ich warne hiervor aber noch einmal, dies ist bei größeren Projekten nicht gut, da man damit jegliche Absicherungen die einen C++ bietet ignoriert!

    Source:

    Anfang:;


    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }



    char achegal;
    cout << "Wollen sie das ganze nochmal wiederholen? (j/n)" << endl;
    cin >> achegal;

    if (achegal == 'j') goto Anfang;

    2) Schleifen:

    Es gibt unterschiedliche Typen von Schleifen, einmal die while(do-while) - Schleife und die for - Schleife. Eine Schleife arbeitet im Prinzip einfach, sie prüft etwas ab, und solange dies nicht eintrifft, fängt sie von vorne an und es passiert etwas ( wenn nichts passiert, würde die Schleife ja immer wieder von vorne Anfangen -> eine Endlosschleife).

    Source:


    do
    {


    if ( rezeichen == "1" || rezeichen == "2" || rezeichen == "3" || rezeichen == "4")

    {

    if ( rezeichen == "1" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: ";
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: ";
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 + zahl2 << endl;
    }

    if ( rezeichen == "2" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 - zahl2 << endl;
    }

    if ( rezeichen == "3" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 / zahl2 << endl;
    }

    if ( rezeichen == "4" )
    {
    cout << "Bitte geben Sie Zahl 1 ein: " << endl;
    cin >> zahl1;
    cout << "Bitte gehben Sie Zahl 2 ein: " << endl;
    cin >> zahl2;
    cout <<"Ergebnis: " << zahl1 * zahl2 << endl;
    }

    }

    else
    {
    cout << "Bitte tätigen Sie eine korrekte Eingabe" << endl;
    }




    char Anfang;
    cout << "Wollen sie nochmal von Vorne beginnen? (j/n)" << endl;
    cin >> Anfang;

    } while ( Anfang == 'j')


    So jetzt habe ich genug geschrieben. Wenn du diesbezüglich noch was Wissen möchtest, kannst du mich ja anschreiben. Hoffe aber, ich habe es verständlich erklärt

    MfG Blood
    [S] Nette Leute

    [Ironie]
    [S] Imba FUD Crypter
    [B] PSC, 11!! NonPub Wissen
    [/Ironie]

  4. #14
    Bad Times Virus
    Registriert seit
    04.03.2008
    Beiträge
    506

    Standard

    kleiner fehler:
    Code:
    Source:
    
    Anfang:;
    das ; is doch überflüssig oder nich??

    ja ich rate dir auch von goto ab aber falls es nich anderst weißt oder ab und zu doch machst mach hinter goto Anfang; // nen kommentar wo zb steht zeile 12 oder was auch immer... also da wos hin geht
    weil mit goto kannst quer durchs prog springen. also großes chaos^^

  5. #15
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi
    Zitat Zitat von eRaSeR!
    mit goto kannst quer durchs prog springen.
    Nein, kannst Du nicht.
    Du kannst quer durch eine Funktion springen.

    Mit setjmp() und longjmp() lässt sich diese Barriere sprengen, jedoch kann man nur in Teile des Programms springen, die bereits ausgeführt wurden (und an denen dabei mit setjmp() eine Sprungstelle definiert wurde).

    EDiT:
    Allerdings sollte diese Möglichkeit für nichts mehr als zur Fehlersuche genutzt werden und gilt als Unsitte!
    Genau wie goto erschwert das die Wartung des Kodes sehr stark und ist fehlerträchtig!

    GreetZ RiDER

Seite 2 von 2 ErsteErste 12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •