Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Probleme mit Cin

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
30.04.2004, 15:26 Uhr
iceT18



hi ...

habe folgendes schwerwiegendes Problem mit cin bei meinem Code ...

drückt der Benutzer bei der Eingabeaufforderung den Buchstaben "d" wird die methode checkInputD() aufgerufen ... in dieser dann die methode definition_labyrinth() ...

und da beginnen dann unsere Probleme ...

der code wie er hier abgebildet ist funktioniert ... es werden in der methode definition_labyrinth() 2 uint32 Variablen angelegt und denen der Wert 10 zugewiesen ... dann wird eine char matrix mit 10 Spalten und 10 Zeilen erzeugt ... danach wird diese wieder gelöscht ...

wir wollen aber das der benutzer werte eingeben kann ... daher die auskommentierte Zeile ...

//cin >> row >> line;

der Benutzer soll also z.B. folgendes eingeben ...

5 3(enter)

diese werte werden doch in die variablen row und line gespeichert ... das sagt uns zumindestens unser cout ...


kurz gesagt ...
lässt man das cin >> row >> line; also im code kommt es zu irgendeinem problem und das ganze haut nimmer hin ...

auch die erstellte Matrix wird laut memusage nicht mehr gelöscht ...

bitte um dringende Hilfe

Code:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>



#define MAX_LINE_LENGTH 128
#define ILLEGAL_ARGUMENTS -1

using std::cout;
using std::cin;
using std::cerr;
using std::endl;

typedef unsigned int uint32;

class InputHandler
{
public:
  InputHandler();
  ~InputHandler();

  void dispatch(char *input_line);
  void checkInputD(char *input);
  void run();
  void definition_labyrinth();
  void quit_labyrinth();
};


int main()
{
  InputHandler inputhandler_test;
  inputhandler_test.run();
      system("PAUSE");
      return 0;
}

InputHandler::InputHandler()
{
}
//------------------------------------------------------------

InputHandler::~InputHandler()
{
}

//------------------------------------------------------------

// The main run-loop that accepts the keyboard input

void InputHandler::run()
{
  char input_line[MAX_LINE_LENGTH + 1];

   for(;;)
  {
    cout << "labyrinth> ";
    cin.clear();
    cin.getline(input_line, MAX_LINE_LENGTH);
    dispatch(input_line);
  }
}
//------------------------------------------------------------

// dispatches the keyboard input

void InputHandler::dispatch(char *input_line)
{
  char *input = 0;
  input = new char[strlen(input_line + 1)];
  strcpy(input,input_line);

  char command[2];
  strncpy(command, input, 1);

  switch(command[0])
  {
    case 'd':
        checkInputD(input);
        delete[] input;
        break;
          
    case 'q':
        delete[] input;
        quit_labyrinth();
        break;

    default:
       cout << "error: unrecognized command" << endl;
       delete[] input;
       break;
  }
}
//------------------------------------------------------------
void InputHandler::checkInputD(char *input)
{
if (strlen(input) > 1)
    {
      cerr << "error: unrecognized command" << endl;
    }
    definition_labyrinth();
}
//------------------------------------------------------------

void InputHandler::quit_labyrinth()
{
  exit(1);
}

//------------------------------------------------------------

void InputHandler::definition_labyrinth()
{

  char **matrix_;
  uint32 row = 10;
  uint32 line = 10;

  //cin >> row >> line;


  cout << "Spalte: " << row << endl;
  cout << "Zeile: " << line << endl;

   matrix_ = new char*[row];
  for (uint32 j = 0; j < row; j++)
     matrix_[j] = new char[line];

  for (uint32 j = 0; j < row; j++)
    delete[] matrix_[j];
  delete[] matrix_;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.05.2004, 22:55 Uhr
Lensflare



uiiii ein ziemlich langer code, ich blick da nicht durch, aber vielleicht ist es der selbe fehler, den ich auch hab:
du hast ja geschrieben, der user soll folgendes eingeben:

5 3(enter)

zwischen der 5 und der 3 ist ja ein leerzeichen und anscheinend kommt ein array vom typ char nicht mit leerzeichen zu recht. Ist jedenfalls mit scanf() so.

Aber ich hab mal ne frage an dich, du hast doch diese "char matrix" erwähnt...
ich schätze, das ist ne methode, um die konsole als 2D gittersystem zu benutzen, um zB "tetris" oder "vier gewinnt" zu programmieren, richtig?
Bei deinem code blick ich wie gesagt nicht durch, könntest du mir an einem kleinen beispiel zeigen, wie ich so eine matrix erstelle?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.05.2004, 11:35 Uhr
DerSchwarzeSchlumpf



hi

jo das problem mit cin hatte ich auch. anscheinend bleibt da immer wast im stdin oder wie das heißt drin wenn zuviel eingegeben wird oder so etwas... .

ich würde an deiner stelle aber sofort auf cin.getline() wechseln.

1) Angenomen ich gebe "-10" (negative zahl) ein, was passiert? *sfg*
2) Angenommen ich gebe "a b" (also 2 chars) ein, was passiert?
3) Angenommen ich gebe überhaupt irgendetwas ein also zB "adgjköjsdgkjdsgöjösdkgjkösdjgkösdjgök", was passiert?

da würd ich zuerst mit cin.getline() die benutzereingabe auslesen und dannach erst einmal alle möglichen fehlerquellen ausschalten und erst danach! (wenn alles seine richtigkeit hat) den uint32 daraus berechnen... .

nur mal so als kleiner tipp *g*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: