PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] If Abfrage



kpayne
14.02.2005, 15:25
Hallo,

also ich programmiere gerade ein kleines Textadventure in C++, aber habe ein Problem.
Undzwar gibt man am Anfang den Namen ein und was man machen will!



cout<<"Was wollen sie tun:";
cin>>todo;
if (todo=="raum1")
{
cout<<"Du bist jetzt in raum1";
}

Nur irgendwie funzt das mit if(todo=="raum1") nicht. Ich will abfragen was man eingibt. Wenn man zb raum1 eingibt soll da stehen "du bist in raum1". Aber es klappt nicht.
Hier mal die Fehler die DevC++ anzeigt.



15 C:\Dev-Cpp\Textadventure\main.cpp ISO C++ forbids comparison between pointer and integer

Ich habe auch gestern im IRC Channel "progforum" nach gefragt, aber irgendwie war wohl jeder away^^ kA!

Vielen Dank im vorraus!

Lukas
14.02.2005, 15:29
Ist eigentlich recht eindeutig. Eine Variable ist ein Pointer, die andere nicht.
Außerdem solltest du beide als vom selben Typ deklarieren, wenn du eine Ganzzahl mit einem String vergleichst, wird da nicht viel draus ;)

Dingsi
14.02.2005, 16:13
Das Problem bei C ist es, dass es keine echten Strings gibt, sondern nur Char-Arrays/Pointer auf diese. (Wenn man nicht basic_string benutzt)
Deswegen kann man nicht einfach zwei char*/[]s mit == vergleichen. Dafür brauch man die Funktion strcmp() aus string.h
Die Funktion liefert 0 (entspricht false oder auch !) zurück wenn die Strings gleich sind.
#include <string.h>
...
char[255] todo;

cout<<"Was wollen sie tun:";
cin>>todo;
if (!strcmp(todo,"raum1"))
{
cout<<"Du bist jetzt in raum1";

Da fällt mir noch was ein.
Am Ende des Strings ist wahrscheinlich noch ein Zeilenumbruch \n. Versuch mal !strcmp(todo,"raum1\n").

Übrigens.. wenn man eh C++ benutzt kann man auch folgendes machen:
#include <string> // Wichtig: OHNE H!
...
string todo;

cout<<"Was wollen sie tun:";
cin>>todo;
if (todo == "raum1\n")
{
cout<<"Du bist jetzt in raum1";

kpayne
14.02.2005, 18:41
Vielen Dank. Der zweite Code von Dingsi funzt!

War vorher einkaufen, konnte nicht früher schreiben!

cya

pimp
15.02.2005, 23:21
Ich bin zwar ein n00b ins sachen c++ aber was soll das bringen?
Soll das ein Begrüssungsprogramm sein?
Oder wie soll ich das Interpretieren?

Ynnus
15.02.2005, 23:56
Ein Textadventure soll das werden. ;)

Aber irgendwie stimmts schon, normalerweise drückt man da nur 1 - 4 (je nach Menge der Wahlmöglichkeiten) für die verschiedenen Auswahlmöglichkeiten und der Text erklärt was dann passiert. Aber man kann die Methode oben ja dennoch für einige Passagen verwenden. Wenn es um explizite Anweisungen geht die nicht extra aufgeführt sind oder eigene Konsolenbefehle zum Beenden des Spiels oder so.

Rolus
15.02.2005, 23:59
Komisch ...
Kpayne hat doch in seinem ersten Post geschrieben, dass es ein Textadventure werden soll. Und er will den Benutzer damit wohl wählen lassen, was er machen will. Und wenn der Benutzer z.B. raum1 eingibt, soll da eben der Text des raum1 stehen. Man braucht wirklich nicht viel Erfahrung, um das dem Quellcode entnehmen zu können.
Und wieso willst du das interpretieren? Das Thema ist abgeschlossen, und C++ muss man gar nicht interpretieren ... ;)
edit: Das war heute das dritte Mal, dass jemand schneller war.

freundliche Grüße, Rolus

pimp
16.02.2005, 00:04
hehe ich hab nur das zweite gelesen sorry aber ich meinte was anderes mit interpretieren.
Wie hast du das denn gemeint

Crash-Override
16.02.2005, 00:57
Wahrscheinlich das hier:
=> (http://de.wikipedia.org/wiki/Interpreter) Interpreter

C++ ist ja eine Compilersprache wärend einige Sprachen nur wärend der Laufzeit interpretiert werden...

Die 2. Möglichkeit wäre den Quelltext zu interpretieren im Sinne von analysieren bzw. verstehen was damit gemint ist.

Jesus_666
16.02.2005, 07:31
Ein Textadventure soll das werden. ;)

Aber irgendwie stimmts schon, normalerweise drückt man da nur 1 - 4 (je nach Menge der Wahlmöglichkeiten) für die verschiedenen Auswahlmöglichkeiten und der Text erklärt was dann passiert. Aber man kann die Methode oben ja dennoch für einige Passagen verwenden. Wenn es um explizite Anweisungen geht die nicht extra aufgeführt sind oder eigene Konsolenbefehle zum Beenden des Spiels oder so.
Zumindest bei den normalen hausgemachten Textadventures (wie ich zugeben muß auch in dem, mit dem ich mich in Ruby einarbeite). Die richtig guten Textadventures haben natürlich Steuerung über Texteingabe, mit unglaublich leistungsfähigen Parsern:
[BTW, ich zitiere hier aus dem Spiel "Adventure" (http://de.wikipedia.org/wiki/Adventure_%28Spiel%29), genauer gesagt aus der 550 Punkte-Version für MacOS 9.]
[Ein Zwerg will mich gerade umbringen und ich wehre mich]

> use axe with dwarf
Huh??
> kill dwarf with axe
With your bare hands?
> NO
> axe dwarf
What do you want to do with the axe?
> attack dwarf with axe
Huh??
> equip axe
Huh??
> wield axe
Huh??
> throw axe at dwarf
You have just killed a dwarf. [...]Okay, es ist wohl keine gut Idee, bei einem selbstgebauten Adventure einen Parser zu verwenden - entweder codet man sich tot oder der User muß wie bei Adventure immer exakt die richtige Zeile eingeben, oder er kommt nicht weiter.

Ynnus
16.02.2005, 16:14
Man könnt ja Untermenüs machen und ne Art Dos-Steuerung...^^

So etwa:


Inhalt von Haus1: Ein Großer Ork steht dir bevor.
Aktionen:

. <dir>
.. <dir>
Handlungen <dir>
Inventar <dir>
Ortshandlung <dir>

...400 byte in 4 Ordnern
...14 Wahlmöglichkeiten
...4 Neue Interaktionsmöglichkeiten
Und dann wechselt man mit "cd <name>" den Ordner und dort befinden sich die Aktionen drinne... Dann kann man auch noch viel Inhalt reinbringen und mit "dir/p" den Inhalt Bildschirmweise durchgehen. Macht aber sicher auch recht viel Arbeit, muss also nicht sein.
Das bringt mich auf die Idee, mal ein eigenes DOS zu programmieren. Mal sehen was sich da so machen lässt...