Do{}while();schleife hört nicht auf... aber warum?

FBIagent

Erfahrenes Mitglied
Wie im betreff schon gesagt habe ich eine do{}while(); schleife. Diese hört aber nicht auf
wenn die bedingung erfüllt sein sollte.

Code:
#ifndef __MY_GS_MENUE_H
#define __MY_GS_MENUE_H

#include <iostream>
#include <conio.h>
using namespace std;

void gs_menue()
{
  char input;
  bool continue_loop = true;
  cout << "[1] Manage characters";
  cout << "\n[2] Manage inventory";
  cout << "\n[3] Manage NPC/monster";
  do
  {
    input = getch();
    if(input=='1')
      continue_loop = false;
    if(input=='2')
      continue_loop = false;
    if(input=='3')
      continue_loop = false;
  }while(continue_loop==false);
}

#endif

Nun meine frage: Warum hört sie nicht auf?
 
Die Frage ist einfach beantwortet. Schau dir deinen Code nochmal genauer an. Er macht Folgendes

continue_loop = true

do
{
// wenn Bedingung zutrifft -> Input = 1, 2 oder 3
continue_loop = false
}while(continue_loop == false)

wenn die Bedingung 1 mal zutrifft wird continue_loop auf false gesetzt aber nicht mehr zurück auf true -> Endlosschleife. Die Lösung sieht so aus:

Code:
#ifndef __MY_GS_MENUE_H
 #define __MY_GS_MENUE_H 
#include <iostream>
 #include <conio.h> 
using namespace std; 

void gs_menue() 
{
 char input;
 bool continue_loop;
 cout << "[1] Manage characters";
 cout << "\n[2] Manage inventory";
 cout << "\n[3] Manage NPC/monster";

 do 
 {
  continue_loop = true;

  input = getch();
  if(input=='1')
   continue_loop = false;
  if(input=='2')
   continue_loop = false;
  if(input=='3')
   continue_loop = false;
 }while(continue_loop==false); 
}

#endif

EDIT: eine bessere Lösung wäre es aber mit while(true) und break zu arbeiten
Code:
void gs_menue() 
{
 char input;
 cout << "[1] Manage characters";
 cout << "\n[2] Manage inventory";
 cout << "\n[3] Manage NPC/monster";

 while(true) // Endlosschleife
 {
  input = getch();
  if(input=='1' || input=='2' || input=='3')
   break; // Schleife verlassen
 }
}

#endif
 
Zuletzt bearbeitet:
Ich habe jetzt folgendes genommen:

Code:
void gs_menue()
{
  char input;
  cout << "[1] Manage characters";
  cout << "\n[2] Manage inventory";
  cout << "\n[3] Manage NPC/monster";
  while(true)
  {
    input = getch();
    if(input=='1' || input=='2' || input=='3')
      break;
  }
}

Aber dabei verlässt er die Schleife mit jeder Taste also mir fällt dazu nichts ein Warum
und Wieso. Dir vieleicht?
 
moin


Also bei mir gehts, bei 1, 2, oder 3 wird die Schleife verlassen. Bei anderen Tasten passiert nichts.


mfg
umbrasaxum
 
Liegt es vieleicht am Compiler? Dev-C++

EDIT:
Also das hier funtzt:

Code:
#ifndef __MY_LS_MENUE_H
#define __MY_LS_MENUE_H

#include <iostream>
#include <conio.h>
using namespace std;

void ls_menue()
{
  char input;
  cout << "[1] Manage accounts";
  while(true)
  {
    input = getch();
    if(input=='1')
      break;
  }
}

#endif

Aber beim gs_menue funtzt es noch nicht einmal wenn ich
Code:
    if(input=='1')
      break;

benutze.

EDIT 2:
Ich merke gerade das die .exe nicht neu gemacht wird.

EDIT 3:
Aus irgendeinem Grund wurde die .exe nicht neu gebildet beim kompilieren.
Habe einfach 'Alles erneuern' gemacht nun funtzt es.
 
Zuletzt bearbeitet:
moin


Mit dem Compiler sollte das auch nicht zu tun haben...
füg mal ein flush ein:
Code:
fflush(stdin);
input = getch();


mfg
umbrasaxum
 
Ich weiss ja nicht, aber irgendwie hab ich das Gefuehl, ihr macht es hier gerade unnoetig kompliziert. Kann natuerlich sein, dass ich das Problem missverstehe. Aber haette als korrektur nicht einfach ausgereichtet, beim Original-Code in der while Abfrage continue_loop==false durch continue_loop!=false oder continue_loop==true zu ersetzen?
Also in der Art:
Code:
/* do-while-loop */
#include <iostream>

int main(void) {

    char c;
    bool continue_loop=true;

    do {
	switch (c=getchar()) {
	    case '1':
		continue_loop=false;
		break;
                /* andere case abfragen ... */
 	}
    } while(continue_loop==true);

    return 0;
}
 
Wenn ich dich richtig verstanden hab willst du dass die schleife aufhört wenn continue_loop gleich false ist!
Probier mal das aus:
Code:
#ifndef __MY_GS_MENUE_H
#define __MY_GS_MENUE_H

#include <iostream>
#include <conio.h>
using namespace std;

void gs_menue()
{
  char input;
  bool continue_loop = true;
  cout << "[1] Manage characters";
  cout << "\n[2] Manage inventory";
  cout << "\n[3] Manage NPC/monster";
  do
  {
    input = getch();
    if(input=='1')
      continue_loop = false;
    if(input=='2')
      continue_loop = false;
    if(input=='3')
      continue_loop = false;
  }while(continue_loop==true);
}

#endif

Edit: ups sorry hab gerade erst gesehen das canuzzi etwas ähnliches gepostet hat
 
Zuletzt bearbeitet:
Zurück