Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Mal wieder ein komisches Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2003, 16:35 Uhr
~andreasK
Gast


Hab folgenden Code:


C++:
int check_input(int input)
{
    if (input >= 7)
    {
        cout << "zu hoch!" << endl;
        cin >> input;
        check_input(input);
    }
    if (game[0][input] != 0)
    {
        cout << "spalte voll, neu eingeben";
        cin >> input;
        check_input(input);
    }
    
    return input;
}



wenn ich mit input eine Zahl zum Beeispiel 20 dreien oder so eingebe bekomm ich erst ein paar mal "zu hoch ausgegeben und dann wenn ich ne andere Zahl eingebe stürzt mir das Programm ab?
Weis jemand woran das liegt?

Gruß

--edit: Kein HTML, sondern ThWBoard-Code. Links neben dem Eingabefeld, über den Smilies ist ein Link "Formatierungsmöglichkeiten", da steht mehr. <code> durch [ cpp ] ersetzt.

Dieser Post wurde am 20.08.2003 um 16:37 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2003, 16:46 Uhr
~Marzel_nopass
Gast


Hi Andreas,

da du deine funktion rekursiv aufrufst, hast du noch die zu hohen werte in der variablen input (da die funktion mit call-by-value aufgerufen wird). Wenn du
statt

Code:
int check_input(int input)



dies hier schreibst


Code:
int check_input(int &input)  //call-by-reference



sollte wenigstens der fehler nicht mehr kommen, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.08.2003, 16:49 Uhr
0xdeadbeef
Gott
(Operator)


Junge, Junge, das ist aber sehr Scheme-Like geschrieben. Ich würd das ohne Rekursion anfangen. Sowas in der Art:

C++:
int get_input() {
  int input;
  while(1) {
    cin >> input;
    if(input >= 7) {
      cout << "zu hoch!" << endl;
      continue; //weitermachen
    }
    if (game[0][input] != 0) {
      cout << "spalte voll, neu eingeben" << endl;
      continue; //weitermachen
    }
    break; //Wenn der Wert OK ist, raus hier.
  }
  return input;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.08.2003, 16:49 Uhr
0xdeadbeef
Gott
(Operator)


@Marzel: Nein, das ist es nicht. input wird ja neu eingelesen, deswegen steht der alte Wert nicht mehr drin.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.08.2003, 16:54 Uhr
~marzel_nopass
Gast


@0xdeadbeef: aber wenn der neu eingelesene wert immer noch zu hoch ist wird zwar check_input aufgerufen, wird jedoch spaeter diese funktion verlassen, ist der wert immer noch zu hoch und bei der if-abfrage wird dann ein zu hoher array-index benutzt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2003, 17:04 Uhr
0xdeadbeef
Gott
(Operator)


Ach, sorum. Jetzt verstehe ich, was du meinst. Klar, damit hast du recht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: