Ja Nein Abfrage



  • Hi, ich schreibe morgen eine Arbeit in Ami und war deswegen jetzt dafür am lernen. Eine Aufgabe besteht darin, ein Programm zu machen (egal welches) bei dem am Ende abgefragt wird ob man nochmal will j/n, bei j soll es nochmal von vorne beginnen (danach natürlich wieder die Abfrage), bei n soll es das Programm beenden und bei irgend einer anderen Eingabe soll es z.B. sagen "Falsche Eingabe" und dann nochmal die "Nochmal"-Abfrage machen. Eigentlich würde ich das schaffen, aber es soll keine Spaghetti-Programmierung sein, also so unübersichtlich. Ich weiß einfach nicht wie ich das machen soll. Würde mich echt freuen wenn mir jemand helfen könnte! Hier ist das Programm soweit:

    #include <iostream.h>
    #include <conio.h>
    
    int main()
    {
     float z1, z2, erg;
     char z3;
     do
     {
    
            cout<<"Division\n";
            cout<<"Zähler 1:";
            cin>>z1;
            cout<<"Nenner 2:";
            cin>>z2;
            erg=z1/z2;
            cout<<"Ergebnis:"<<erg;
            getch();
            cout<<"\nNochmal? j/n\n";
            cin>>z3;
            }
            while (z3=='j');
            {
    
                    if (z3=='n')
    
                    {       cout<<"Ende";
                            getch();
                    }
    
                    else
                            {
                            cout<<"Falsche Eingabe!";
                            getch();
                            }
    
               }
    
           return 0;
    }
    


  • #include <iostream.h>
    #include <conio.h>
    
    int main()
    {
     float z1, z2, erg;
     char z3;
    
     cout<<"Division\n";
     cout<<"Zähler 1:";
    
     cin>>z1;
    
     cout<<"Nenner 2:";
    
     cin>>z2;
    
     erg=z1/z2;
    
     cout<<"Ergebnis:"<<erg;
    
     getch();
    
     Nochmal: cout<<"\nNochmal? j/n\n";
    
     cin>>z3;
    
     if (z3=='j');
     {
    
     else if (z3=='n')
    
     {       
        cout<<"Ende";
        getch();
     }
    
     else
     {
        cout<<"Falsche Eingabe!";
        getch();
        goto Nochmal;
     }
    
       return 0;
    }
    

    So müsste es gehen...

    MfG Riddick04



  • erstens ist das hier ein klassisches Beispiel goto nicht zu benutzten.
    zwitens solltest du standard header ohne .h inkludieren.
    3tens ist zwar do while hier der klassische ansatz und auch keineswegs verkehrt,
    aber wie findest du diese möglichkeit ( da es dir ja um aussehen zu gehen scheint)

    // bitte beachten ist nicht getestet

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    	float z1, z2, erg;
     	char z3;
    
    	for(;;){
    		cout<<"Division\n";
        	cout<<"Zähler 1:";
        	cin>>z1;
        	cout<<"Nenner 2:";
        	cin>>z2;
    	    erg=z1/z2;
        	cout<<"Ergebnis:"<<erg;
        	getch();
        	cout<<"\nNochmal? j/n\n";
    
        	cin>>z3;
    		if(z3=='n'){
    			cout<<"Ende";
    			break;
    		}else if(z3=='j'){
    			cout<<"dann gehts weiter\n";//ggf nen continue;
    		}else
    			cout<<"falsche eingabe(dennoch weiter)\n";//s.o
    	}
           return 0;
    }
    

    @Riddick04: ohne mir das genau angeguggt zu haben ist es meine bescheidene Meinung das dein code irgendwie eklig ist.



  • Okay, soweit klappts dann. Aber was bedeutet das (;;) bei for? Und wie mache ich das, dass er bei einer Falschen Eingabe nicht wieder von vorne anfängt sondern nochmal "Nochmal?" fragt? Aber danke auf jeden Fall!!



  • Ich meine natürlich das

    (;;)
    

    bei for. Blöder Smiley.



  • die for schleife ist grob gesagt wie folgt definiert
    for(startwert;!abbruchbedingung;zählintervall)
    da wir aber eine endlosschleife wollen brauchen wir keine bedingungen o.Ä. also reicht for(;;)..

    und wenn du die abfrage nochmal stellen willst müssen wir diese von der berechnung trennen . in diesem fall ( es geht vll auch eleganter ) geht natürlich eine 2te schleife, die quasi die abfrage durchläuft bis ja oder nein eingegeben wurde.

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    	float z1, z2, erg;
     	char z3;
    
    	for(;;){
    		cout<<"Division\n";
        	cout<<"Zähler 1:";
        	cin>>z1;
        	cout<<"Nenner 2:";
        	cin>>z2;
    	    erg=z1/z2;
        	cout<<"Ergebnis:"<<erg;
        	getch();
    		for(;;){//schleife für unsere frage
        		cout<<"\nNochmal? j/n\n";
        		cin>>z3;
    			if(z3=='n'){
    				cout<<"Ende\n";
    				return 0;//ganzes programm wird beendet
    			}else if(z3=='j'){
    				cout<<"dann gehts weiter\n";// nur die schleife
    				break;//wird beendet und die andere läuft
    			}else         // mit der berechnung weiter
    				cout<<"falsche eingabe(dennoch weiter)\n";
    				//weiter in der abfragenschleife
    		}
    	}
           return 0;
    }
    

    //edit smilies



  • /////////////////////////////////////
    // INCLUDES
    /////////////////////////////////////
    #include <iostream.h>
    #include <conio.h>
    
    ////////////////////////////////////
    // Hauptfunktion
    ////////////////////////////////////
    
    int main()
    {
       // Deklarationen
       float z1, z2, erg;
       char z3;
    
       while(true)
       {
          cout << "Division" << endl;
          cout << "Zähler 1:";
          cin>>z1; // Eingabe
          cout << endl << "Nenner 2:";
          cin>>z2; // Eingabe
          erg = z1 / z2; // Berechne
          cout << "Ergebnis:" << erg << endl;;
          getch();
          cout<<"\nNochmal? j/n" << endl;
          cin>>z3;
    
          if (z3 == 'n')
          {
             cout << "Ende";
             getch();
             break;
          }
          else if (z3 != j)
          {
             cout << "Falsche Eingabe!" << endl;
          }
       }
    
       return 0;
    }
    


  • #include <iostream>
    using namespace std;
    
    int main()
    {
    	int zaehler, nenner;
    	char nochmal = 'j';
    
    	while( nochmal == 'j' )
    	{
    		cout << "Division\n";
    		cout << "Z\x84hler:";
    		cin >> zaehler;
    		cout << "Nenner:";
    		cin >> nenner;
    		cout << "Ergebnis:" << (zaehler/(float)nenner);
    
    		cout << "\nNochmal? j/n\n";
    		cin >> nochmal;
    
    		while( nochmal!='j' && nochmal!='n' )
    		{
    			cout << "FALSCHE EINGABE!!!\nNochmal? j/n\n";
    			cin >> nochmal;
    		}
    	}
    
    	cout << "Auf Wiedersehen!" << endl;
    }
    


  • @Riddick04: Benutz mal die neuen Header, die mit .h sind veraltet:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv) {
      float n,z,erg;
      char c;
    
      do {
        cout<<"\nZahler: ";
        cin>>z;
    
        cout<<"\nNenner: ";
        cin>>n;
    
        if (n==0)
          break;
    
        erg = z/n;
        cout<<"\nErgebnis: "<<erg;
    
        cout<<"Nochmal (j/n) ?";
        cin>>c;
      }while(c!='n');
    
      return EXIT_SUCCESS;
    };
    

Log in to reply