Problem mit getline!

  • Themenstarter Themenstarter peter pan
  • Beginndatum Beginndatum
P

peter pan

Tag auch ich hab folendes problem, ich möchte eine Zeile über sämtliche Leerzeichen hinweg auslesen. Das klappt auch ganz gut mit "getline", aber wenn ich jetzt versuche mit einer IF-Abfrage, die eingelesen Variable zu überprüfen, geht das nicht. Das erschein mir auch seh logisch da "getline" ja noch ein NULL-Byte anhängt, aber welche möglichkeiten gibt es denn dann eine mit "getline" engelesen Variable zu überprüen? Hier zum besseren Verständnis noch mein Source:
Code:
cin.getline (cmd,500);

if (cmd == "exit") 
{
    cout << "hurra" << endl;
}
 
Tag nicht geschlossen -.-


Code:
cin.getline (cmd,500);

if (cmd == "exit")
{
cout << "hurra" << endl;
}
 
Das hat nichts mit der NULL zutun; das Problem ist, dass du nur die Pointer vergleichst.

Besser so:
if(!strcmp(cmd,"exit"))

Gruß
 
Hey,

oder du schreibst deine char Array in eine String Variable um. Dann kannst du die string variable einfach so vergleichen wie du es schon gemacht hast.

string test;
char cmd[500];

dann ließt du halt mit getline in dein Array ein...
und dann in den string schreiben...

test = cmd;

if(test == "exit")
{
.....
}
 
Hi.

... oder du nimmst einfach std::string (dann mußt du auch nicht auf die Größe achten):
C++:
#include <string>

std::string line;

if (getline(cin, line)) {
  if (line == "exit") {
    ...
  }
}
Gruß
 
Ich habe für getline auch mal eine eigene kleine Funktion geschrieben. Die hilft ja vielleicht dem ein oder anderen

C++:
VOID	GetLine(string &_szDestinationString) {
	fflush(stdin);
	getline(cin, _szDestinationString);
}

dann kann man ganz einfach die funktion so anwenden

C++:
string szString;

GetLine(szString);

if(szString == "bla") {
}

LG Manu
 
Zuletzt bearbeitet von einem Moderator:
Ich habe für getline auch mal eine eigene kleine Funktion geschrieben. Die hilft ja vielleicht dem ein oder anderen

C++:
VOID	GetLine(string &_szDestinationString) {
	fflush(stdin);
	getline(cin, _szDestinationString);
}
fflush ist nur auf Ausgabeströmen definiert. fflush(stdin) sollte man also keinesfalls verwenden.
dann kann man ganz einfach die funktion so anwenden

C++:
string szString;

GetLine(szString);

if(szString == "bla") {
}
Und woher weißt du jetzt, das überhaupt eine Zeile eingelesen wurde? ;-]

Wozu diese Funktion? Statt deiner extra Funktion, kann man doch gleich std::getline verwenden, wobei man auch noch flexibler den zu verwendenden Stream angeben kann.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Bei mir kam es desöfteren vor, dass getline ohne fflush einfach übersprungen wurde bzw, nicht auf die Eingabe gewartet wurde.
Und dass eine Zeile zuende ist, weiß ich dadurch, dass Enter gedrückt wird ;-)
 
Zuletzt bearbeitet:
Bei mir kam es desöfteren vor, dass getline ohne fflush einfach übersprungen wurde bzw, nicht auf die Eingabe gewartet wurde.
Siehe http://www.cprogramming.com/faq/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351
Und dass eine Zeile zuende ist, weiß ich dadurch, dass Enter gedrückt wird ;-)
Wenn keine Zeiler mehr in der Eingabe ist, kann auch keine Zeile eingelesen werden.

Gruß
 
Okay wenn du jetz noch ne alternative zu fflush(stdin); nennst halt ich meine schnute...ansonsten Funktioniert es aber ohne Probleme bei mir =P
Und bei getline gehts auch nich weiter bevor man nicht mindestens eine andere Taste vor enter gedrückt hat...

EDIT.: hat sich erledigt^^
 
Zurück