C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Eingabe über Komandozeile als String

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
kleiner_junge
Guest





PostPosted: Mon Jul 17, 2006 3:44 pm    Post subject: Eingabe über Komandozeile als String Reply with quote



Moin,
ich bin gerade dabei C++ zu zu lernen.
Ich hab ein Komandozeilen Project mit meinem Dev-C++ von Bloodshed
erstellt und wollte da einen Befehl abfragen und so weiterverarbeiten
wie ich es von Basic gewohnt bin (wobei ich mir denken konnte das das
nich so einfach funktioniert).

Dazu hab ich folgenden Code geschrieben:

char intext;

cout << "Bitte geben sie einen Befehl ein: ";
cin >> intext;

if (intext=="quit")
goto ende;

Als letzte Fehlermeldung kam "ISO C++ forbids comparison between
pointer and integer".
Kann mir einer helfen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Georg Maaß
Guest





PostPosted: Mon Jul 17, 2006 7:36 pm    Post subject: Re: Eingabe über Komandozeile als String Reply with quote



kleiner_junge wrote:

Quote:
Moin,
ich bin gerade dabei C++ zu zu lernen.
Ich hab ein Komandozeilen Project mit meinem Dev-C++ von Bloodshed
erstellt und wollte da einen Befehl abfragen und so weiterverarbeiten
wie ich es von Basic gewohnt bin (wobei ich mir denken konnte das das
nich so einfach funktioniert).

Dazu hab ich folgenden Code geschrieben:

char intext;

Das ist nur ein einzelnes Zeichen.

Quote:

cout << "Bitte geben sie einen Befehl ein: ";
cin >> intext;

if (intext=="quit")

Du vergleichst hier char (links) mit char* (rechts); das bewirkt die
Fehlermeldung, wobei such das "integer" auf den char bezieht, weil das
ein Ganzzahltyp ist, und das pointer auf den char*, weil das ein Zeiger
auf ein char ist.

Mache aus dem intext einen string:

std::string intext;

Der std::string kenn einen Vergleichsoperator für den Vergleich mit
einem char*.


Quote:
goto ende;

Kommt das in einer verschachtelten Schleife vor, oder warum brauchst Du
ein goto?
Quote:

Als letzte Fehlermeldung kam "ISO C++ forbids comparison between
pointer and integer".
Kann mir einer helfen?


--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Georg Wall
Guest





PostPosted: Sun Aug 13, 2006 8:11 pm    Post subject: Re: Eingabe über Komandozeile als String Reply with quote



Wink
char inttext ist 8 bit groß und kann nur ein Zeichen aufnehmen.
wenn schon dann richtig vergleichen: inttext == 'q'
und wenn der inttext laenger sein sollte dann:
char * inttext oder char inttext[4] ...
... also weiterlernen

"kleiner_junge" <webmaster@mario-spitze.de> schrieb im Newsbeitrag
news:1153133090.498536.164140 (AT) p79g2000cwp (DOT) googlegroups.com...
Quote:
Moin,
ich bin gerade dabei C++ zu zu lernen.
Ich hab ein Komandozeilen Project mit meinem Dev-C++ von Bloodshed
erstellt und wollte da einen Befehl abfragen und so weiterverarbeiten
wie ich es von Basic gewohnt bin (wobei ich mir denken konnte das das
nich so einfach funktioniert).

Dazu hab ich folgenden Code geschrieben:

char intext;

cout << "Bitte geben sie einen Befehl ein: ";
cin >> intext;

if (intext=="quit")
goto ende;

Als letzte Fehlermeldung kam "ISO C++ forbids comparison between
pointer and integer".
Kann mir einer helfen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Rolf Magnus
Guest





PostPosted: Mon Aug 14, 2006 1:37 pm    Post subject: Re: Eingabe über Komandozeile als String Reply with quote

TOFU fachgerecht entsorgt. Bitte unterlassen.

Georg Wall wrote:

Quote:
char intext;

cout << "Bitte geben sie einen Befehl ein: ";
cin >> intext;

if (intext=="quit")
goto ende;

Als letzte Fehlermeldung kam "ISO C++ forbids comparison between
pointer and integer".
Kann mir einer helfen?

;-)
char inttext ist 8 bit groß und kann nur ein Zeichen aufnehmen.

Genauer gesagt ist es _mindestens_ 8 bit groß. Es ist aber immer ein Byte
groß.

Quote:
wenn schon dann richtig vergleichen: inttext == 'q'
und wenn der inttext laenger sein sollte dann:
char * inttext oder char inttext[4] ...
.. also weiterlernen

char* wäre nur ein Zeiger, den man erstmal auf was zeigen lassen muß, bevor
man ihn benutzt. char[4] würde für "qui" und den obligatorischen
\0-Stringterminierer reichen. Wenn der Benutzer aber auf die unverschämte
Idee kommt, mehr als drei Zeichen einzugeben, hat das Programm
undefiniertes Verhalten. Es handelt sich um einen "buffer overflow" - die
Hauptursache für Sicherheitslöcher. Außerdem kann man damit immer noch
keinen Vergleich mit Operator== machen, sondern muß die Funktion strcmp
bemühen.

Diese ganzen Probleme kann man einfach umgehen, indem man std::string
benutzt. Der kümmert sich automatisch darum, ausreichend Speicher verfügbar
zu haben und besitzt einen passenden überladenen Operator==. Man müßte im
obigen Code nur das 'char' durch 'std::string' ersetzen und am Anfang noch
ein #include <string> einfügen, und fertig.
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.