Ergebnis 1 bis 11 von 11

Thema: [C++] If Abfrage

  1. #1

    [C++] If Abfrage

    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!

    Code:
        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.

    Code:
    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!

  2. #2
    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

  3. #3
    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.
    Code:
    #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:
    Code:
    #include <string> // Wichtig: OHNE H!
    ...
    string todo;
    
        cout<<"Was wollen sie tun:";
        cin>>todo;
        if (todo == "raum1\n")
        {
        cout<<"Du bist jetzt in raum1";

    Geändert von Dingsi (14.02.2005 um 15:27 Uhr)

  4. #4
    Vielen Dank. Der zweite Code von Dingsi funzt!

    War vorher einkaufen, konnte nicht früher schreiben!

    cya

  5. #5
    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?

  6. #6
    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.

  7. #7
    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

  8. #8
    hehe ich hab nur das zweite gelesen sorry aber ich meinte was anderes mit interpretieren.
    Wie hast du das denn gemeint

  9. #9
    Wahrscheinlich das hier:
    => 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.

  10. #10
    Zitat Zitat von Sunny
    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:
    Zitat Zitat von Adventure
    [BTW, ich zitiere hier aus dem Spiel "Adventure", 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.

  11. #11
    Man könnt ja Untermenüs machen und ne Art Dos-Steuerung...^^

    So etwa:

    Code:
    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...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •