[C++] Taschenrechner neustarten

09/23/2013 20:48 Critone#1
Hey,

ich habe eine Konsolenanwendung mit C++ geschrieben. Der Taschenrechner kann die Grundrechenarten und ein paar andere Funktionen aber das ist auch nicht das Hauptthema.

Wenn ich eine Funktion wähle (z.b Multiplizieren) dann rechnet er. Am Ende der If-Anweisung habe ich system("pause") und return 0, also beendet er nach jeder Rechenart das Programm. Dies möchte ich aber ändern.

Ich möchte das wenn man, z.b Multiplizieren, ausgeführt hat das Programm sozusagen "neustartet" also von Anfang an beginnt und man wieder im Menü bei den Rechenarten ist wo man auswählen kann.

Dies soll mit einer Abfrage nach der Rechenart passieren. Also wenn man gerechnet hat soll eine Abfrage kommen: "Zum beenden J drücken, um wieder ins Menü zu gelangen N drücken."

Ich habe gehört das dass mit eine while-Schleife funktionieren würde, leider habe ich keine Ahnung wie genau das geht und hoffe einfach das ihr mir helfen und Beispiele geben könnt.

Danke schonmal.

Gruß
Critone
09/23/2013 22:09 Dr. Coxxy#2
Code:
do
{
    // ...
} while (!MoechteUserBeenden());
09/24/2013 16:42 Critone#3
Versteh ich nicht ganz, sorry :/ kannst du das vielleicht erklären?
09/24/2013 17:18 jacky919#4
In die Funktion MoechtUserBeenden kommt dann etwa sowas rein:
Code:
bool MoechteUserBeenden()
{
   char input = 'n';

   std::cout << "Wollen Sie nochmal rechnen? j/n: ";
   std::cin >> input;

   return input == 'n';
}
Dann musst du nur noch in die Schleife dein eigentliches Rechenprogramm packen und schon kann man nach jeder abgeschlossenen Rechnung wählen, ob man weiter machen will.
09/24/2013 17:36 Dr. Coxxy#5
Code:
char DoStop;
do
{
  printf("Beenden? ");
  scanf("%c", &DoStop);
  while (getchar() != '\n') { ; }
} while(DoStop == 'n');
C++ musste selber machen mit cout/cin...

EDIT:
ich sollte vllt öfter mal aktualisieren, da war jacky919 schneller - 20 minuten :/
09/26/2013 11:13 alpines#6
Mach entweder eine While 1==1 Schleife drum oder nimm (die schlechtere Variante) Sprungmarken:
Code:
Sprungmarke:

// Hier wird gerechnet

goto Sprungmarke;
09/26/2013 14:13 Nightblizard#7
Quote:
Originally Posted by alpines View Post
Mach entweder eine While 1==1 Schleife drum oder nimm (die schlechtere Variante) Sprungmarken:
Code:
Sprungmarke:

// Hier wird gerechnet

goto Sprungmarke;
Ernsthaft? Du empfiehlst ihm goto? Und dann auch noch bei dem denkbar schlechtesten Anwendungsbeispiel? Wow, einfach nur wow...
09/26/2013 14:40 Schlüsselbein#8
Für goto gibt eigentlich kein gutes Anwendungsbeispiel. Das einzige was mir einfällt: Wenn man aus ner x-fach verschachtelten Schleife will (wobei ich da ein flag benutzen würed, dass man einfach abfragt).
09/26/2013 15:13 Master674b#9
goto sollte auf JEDEN Fall vermieden werden, da alles was zwischen einem Sprung initialisiert wird nie freigegeben wird. Es wird kein stack-unwinding gemacht. Genauso wie bei setjmp und longjmp.
09/26/2013 17:44 alpines#10
Ich sagte doch das es die schlechtere Variante ist, man sollte schon lesen können.
Es ist eine Möglichkeit, natürlich sollte es wenns geht vermieden werden aber trotzdem sollte man ihm die Entscheidung nicht nehmen, und das ist eine Möglichkeit wie man es machen kann nicht muss.
09/26/2013 21:19 MrSm!th#11
Es hat Vorteile, die schlechten Teile einer Sprache gar nicht erst mit zu lernen.
09/27/2013 02:01 Dr. Coxxy#12
na, man sollte alle teile einer sprache lernen, so hat man für jede situation die beste lösung bei hand und kann u.U. auch direkt den code von anderen leuten verstehen, die vllt. nicht so "sauber" arbeiten.
09/27/2013 16:11 MrSm!th#13
Mit den schlechten Teilen bekommt man aber keine guten Lösungen.
Das Verstehen ist vielleicht noch ein Argument.

Ich dachte auch bis vor einiger Zeit, dass man eine Sprache vollständig lernen sollte, aber eigentlich ist das Unsinn. Auch Sprachdesigner machen Fehler und bauen Features ein, die man niemals nutzen sollte. Von denen kann man zwar wissen, aber zu lernen, wie man sie anwendet, ist verschwendete Zeit und verursacht schlimmstenfalla noch, dass man sie sich aneignet (wenn man nicht von Anfang an um ihre Probleme weiß). Das kostet dann gleich doppelt Zeit, weil man sie sich wieder abgewöhnen darf.

Lange Rede, kurzer Sinn: Einem Anfänger goto, und sei es auch nur mit Einschränkung, zu empfehlen, ist absolut hirnrissig.
09/27/2013 16:44 Dr. Coxxy#14
empfehlung aufjedenfall schwachsinn, aber wissen sollte mans trzd. imo
10/06/2013 15:04 Lord iRemix#15
Warum so "kompliziert?"

Code:
#include <string.h>

string bes = "ja";

while( bes == "ja" )
{
	....
	
	std::cout << "Wiederholen?" << std::endl;
	std::cin >> bes;
}