 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
kleiner_junge Guest
|
Posted: Mon Jul 17, 2006 3:44 pm Post subject: Eingabe über Komandozeile als String |
|
|
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
|
Posted: Mon Jul 17, 2006 7:36 pm Post subject: Re: Eingabe über Komandozeile als String |
|
|
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*.
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
|
Posted: Sun Aug 13, 2006 8:11 pm Post subject: Re: Eingabe über Komandozeile als String |
|
|
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
|
Posted: Mon Aug 14, 2006 1:37 pm Post subject: Re: Eingabe über Komandozeile als String |
|
|
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 |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|