Do-While Schleife: Probleme

DerTrojaner

Mitglied
Hallo,

ich habe ein kleines Problem mit meiner Do-While Schleife, und zwar soll ich eine Do-While Schleife Programmieren, das die Grundrechenarten beherrscht (+-*/) (bis hierhin hat alles geklappt).

Und nun kommt mein Problem wo ich nicht weiter weiß :/
und zwar nach Ausgabe des Ergebnisses soll der Benutzer gefragt werden, ob er eine weiter Berechnung durchführen möchte, aber sobald er ein 'N' oder 'n' eingibt soll sich das Programm beenden.

Wie soll ich nun das Anstellen dass ?

Danke im voraus.


C++:
#include<iostream>
using namespace std;

main()
{
   float Z1, Z2, Summe;
   char Operator, Close;

   do
   {
    cout<<"Geben sie die erste Zahl ein!"<<endl;
    cin >>Z1;
    cout<<"Geben sie den Operator ein (+,-,*,/)"<<endl;
    cin >>Operator;
    cout<<"Geben sie die zweite Zahl ein!"<<endl;
    cin >>Z2;
   
    switch (Operator)
    {
      case '+':
       Summe=Z1+Z2;
         break;
      case '-':
       Summe=Z1-Z2;
         break;
      case '*':
       Summe=Z1*Z2;
         break;
      case '/':
       Summe=Z1/Z2;
         break;
      default :
       cout<<"Bitte waehlen sie den operator aus !!! "<<endl;
         break;    
    }
     cout<<"Summe="<<Summe<<endl;

   }  
   while (Close='n'||'N');
   
   system("pause"); 
   
}
 

cwriter

Erfahrenes Mitglied
Hi

Detail: Das Resultat einer Operation ist nicht immer eine Summe. Zudem geht x/y nicht immer (nämlich wenn y==0).

und zwar nach Ausgabe des Ergebnisses soll der Benutzer gefragt werden, ob er eine weiter Berechnung durchführen möchte, aber sobald er ein 'N' oder 'n' eingibt soll sich das Programm beenden.

Wie soll ich nun das Anstellen dass ?
Naja. Nach der Ausgabe des Resultats ein std::cout, das fragt, ob der Nutzer weitermachen will, gefolgt von einem std::cin >> Close?

Ich verstehe das Problem nicht so ganz. Die Kondition hast du ja schon gesetzt?

Gruss
cwriter
 

DerTrojaner

Mitglied
Leider verstehe ich nicht ganz, was du meinst :(

Mein Problem ist halt das ich nicht weiß wie ich das Programm programmieren soll das er weiter rechnen kann oder das Programm schließen kann
 

cwriter

Erfahrenes Mitglied
Mein Problem ist halt das ich nicht weiß wie ich das Programm programmieren soll das er weiter rechnen kann oder das Programm schließen kann
Willst du eine fertige Lösung?

Eine do-While Schleife funktioniert so:
C:
do { body } while(cond);

//ist dasselbe wie
{body}
while(cond) {body}

//und ist intern so
loop:
{body}
if(cond) goto loop;
Was heisst das für dich? Die Kondition cond ist durch den Abbruch gegeben, also falls der Nutzer 'n' eingibt. Daher musst du am Ende des body den Nutzer fragen, ob er weitermachen oder abbrechen will.

Hilft das weiter? Oder brauchst du Code?

Oh und in deinem Code: Close = 'n' setzt den Wert. Da du prüfen willst: Schreibe Close=='n'.

Gruss
cwriter
 

DerTrojaner

Mitglied
Leider kann ich damit nichts anfangen, da mir goto, body oder cond nichts sagen. Leider war unsere Lehrerin 2 monate nicht da und sie verlangt von uns das wir z.B die While schleife innerhalb 1. Stunde verstehen.
 

cwriter

Erfahrenes Mitglied
Leider kann ich damit nichts anfangen, da mir goto, body oder cond nichts sagen. Leider war unsere Lehrerin 2 monate nicht da und sie verlangt von uns das wir z.B die While schleife innerhalb 1. Stunde verstehen.
Äh?
Ok. Dann Basics. (@sheel muss mich unbedingt mal zum Schreiben eines C-Tutorials drängen :p)

Konditionale (if-Blöcke oder if-Verzweigungen) werden benutzt, um unter gewissen Bedingungen gewisse Instruktionen auszuführen.
Ein Beispiel:
C:
if(a == b)
{
//Instruktionen
}

//Nun ist es syntaktisch so definiert:
if (Boolscher Ausdruck) Instruction

//D.h. normalerweise gilt nur die allernächste Instruktion (bzw. Codezeile).
//Um mehrere Codezeilen schreiben zu können, muss man einen Block ({}) definieren. Man nennt das auch Body (genauso wie der Funktionskörper/Function body).
//Ein Bool'scher Ausdruck heisst, dass er Entweder true (nicht 0) oder false (0) sein muss.
//Ein Ausdruck im Allgemeinen wird evaluiert.
//Bsp.:
int i = 0
i; //Evaluiert zu 0 (da i==0)
i == 0; //Evaluiert zu nicht 0 (meist 1), da es entweder gleich oder ungleich sein kann. (Bool'scher Ausdruck)
//diese beiden Zeilen bewirken nichts, daher sind sind reine Ausdrücke.
std::cout << "String"; //Diese Zeile bewirkt etwas, es ist eine Instruktion (nicht mit CPU-Instruktionen verwechseln, auch wenn gewisse Parallelen bestehen)

//goto ist eine der grundlegendsten Operationen. Es ist als CPU-Instruktion auf jeder nennenswerten Architektur verfügbar.
//Es sorgt für einen Rücksprung des Programmes zum gegebenen Label

int b = 3;
loop:
b--;
if(b == 0) goto loop;

//Dadurch entsteht folgender Ablauf:
/*
int b;
b = 3;
b = 2;
(Bedingung erfüllt, jump back)
b = 1;
(Bedingung erfüllt, jump back)
b = 0;
(Bedingung (Kondition) nicht erfüllt) -> Ende
*/
Also, Zusammenfassung (vereinfacht): Body: Was innerhalb von {} steht.
Kondition: Bedingung für eine if-Verzweigung oder eine while()-Schleife.

Nun: Ich weiss nicht, was du schon weisst.
Daher gebe ich dir den Code für deine momentane Aufgabe und überlasse es dir, was du nachfragen willst.

C++:
std::cout << "Weiter? (j/n) ";
std::cin >> Close;
} while(Close != 'n' && Close != 'N');
Wo das einzufügen ist, sollte klar sein (dein while() wird durch die letzte Zeile hier ersetzt).

Gruss
cwriter