Brauche Hilfe



  • Hallo Comunity und zwar folgendes ich bastle mir gerade ein Quiz zusamme ist eigentlich nichts schweres...
    Aber nun stehe ich vor einem Rätsel.
    Programm wird zwar ausgeführt aber bei Thema1 die zweite Antwort da haut bei der Ausführung was nicht hin...
    kann mir jemand helfen!?
    Hier mein Quellcode:

    //---------------------------------------------------------------------------
    #include <iostream.h>
    #include <string>
    //---------------------------------------------------------------------------
    int main()
    {
    cout <<"---------------------------------Quiz Programm-----------------------------v.1.0" <<endl <<endl;
    cout <<"Hier werden dir Fragen gestellt und Du musst Sie einfach beantworten."<<endl;
    
    //VARIABLEN.....................................................................................................................
    char cthema1=1, cthema2=2, cthema3=3, cweiter;
    char cant2[6] ="wasser";
    int iant1=1989;
    
    //VARIABLEN ende................................................................................................................
    cout <<"Waehle eine der folgenden drei Themen aus [1,2,3]:" <<endl <<endl;
    cout <<"1=Thema Marian, 2=Thema Sport, 3=Thema Computer" <<endl <<endl;
    cin >> cthema1,cthema2,cthema3;
    
    switch(cthema1)
    {
    case '1': cout <<"Du hast das Thema Marian genommen, gute Wahl!" <<endl <<endl;
              cout <<"________________________________________________________________________________"<<endl <<endl;
    
       do
       {
              cout <<"1.) In welchem Jahr ist Marian Geboren? [jjjj]" <<endl;
              cin >>iant1;
                  if (iant1==1989)
                  {
                     cout <<"Das war Richtig!" <<endl <<endl <<endl <<endl;
                  }
                  else
                  {
                     cout <<"Das war leider falsch!" <<endl;
                  }
                     cout <<"Weiter[w] oder nochmal[n] versuchen?" <<endl;
                     cin >>cweiter;
       }while(cweiter=='n' || cweiter=='N');
    
       do
       {
              cout <<"2.)Wo haelt er sich am liebsten auf?" <<endl;
              cout <<"[HINWEIS: Antwort besteht aus einem Wort und muss klein geschrieben werden]"<<endl;
              cin >>cant2;
                  if (cant2=="wasser")
                  {
                     cout <<"Das war Richtig!" <<endl <<endl <<endl <<endl;
                  }
                  else
                  {
                     cout <<"Das war leider falsch!" <<endl;
                  }
                     cout <<"Weiter[w] oder nochmal[n] versuchen?" <<endl;
                     cin >>cweiter;
       }while(cweiter=='n' || cweiter=='N');
    
              break;
    case '2': cout <<"Du hast das Thema Sport genommen, gute Wahl!";
              break;
    case '3': cout <<"Du hast das Thema Computer genommen, gute Wahl!";
              break;
    default: ;
    
    }
    getchar();
    return 0;
    }
    //---------------------------------------------------------------------------
    

    /Edit akari : Bitte Code-tags benutzen! sfds



  • 1. Bitte benutze cpp-Tags, damit der Code lesbar ist!

    2. Du bist im falschen Board gelandet, das ist Standard-C++ und hat nix mit der VCL zu tun.

    3. Bitte beschreibe den Fehler genauer. Was geht schief? Fehlermeldung? Fehler zur Compile- oder Laufzeit?

    4. iostream.h ist veraltet. Bitte benutze iostream (ohne Dateiendung).

    EDIT:
    cant2 soll 6 Zeichen halten, du weist aber 7 zu (du vergisst die terminierende Null am Ende jedes C-Strings). Also mach cant2[7] daraus.

    EDIT2:
    Die Zeile if (cant2=="wasser") ist fehlerhaft. Du kannst C-Strings nicht mit "==" vergleichen (dann werden lediglich Zeiger verglichen, die natürlich auf andere Speicherbereiche zeigen). Verwende stattdessen strcmp bzw. strncmp. Übrigens, wenn du std::string nutzen würdest, könntest du ganz normal den Vergleichsoperator verwenden, wie du es vorhattest.



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Ach und eigentlich wollte ich noch den Thread-Titel bearbeiten...
    Bitte aussagekräftigen Titel verwenden!

    bis bald
    akari



  • akari schrieb:

    Ach und eigentlich wollte ich noch den Thread-Titel bearbeiten...
    Bitte aussagekräftigen Titel verwenden!

    Ich wusste doch, ich hatte "5." vergessen. 😃



  • 6. Die Codeeinrückung (sofern wirklich wie hier) ist schlecht.

    Waterboy schrieb:

    //---------------------------------------------------------------------------
    #include <iostream> // nicht iostream.h
    #include <string>
    
    using namespace std; // Header der C++ Standardbibliothek liegen im
    // Namensraum std, daher ist entweder eine volle Qualifizierung wie z.B.
    // std::cout nötig, oder aber ein "using namespace std;" (Bitte niemals in
    // Headern verwenden, dort immer voll ausschreiben).
    //---------------------------------------------------------------------------
    

    7. In vielen moderneren Programmiersprachen ist es unüblich Variablen vor der ersten Verwendung zu deklarieren.

    8. Die Ungarische Notation ist bei allen Sprachen die benutzerdefinierte Typen zulassen eher unschön, und auch in C++ inzwischen eher unüblich. Besser man nennt Variablen nach ihrem Zweck, als nach ihren Typ, und nimmt sprechende Bezeichner, nicht kryptische Abkürzungen.

    9. Warum hast du 3 Variablen zur Themenauswahl, wenn man nur ein Thema wählt?

    10. Du solltest wirklich std::string statt char-Arrays verwenden 😉 Schau hierzu nochmal das "EDIT2:" bei _matze seinen ersten Post an...


  • Mod

    Um dir mal zu sagen, was der Fehler ist, anstatt bloß deinen Code zu kritisieren:

    cant2=="wasser"
    

    Das vergleicht einen char-Zeiger mit einem char-Zeiger auf ein Literal. Es vergleicht nicht die char-Arrays auf die die Zeiger zeigen. Dafür müsstest du strcmp nehmen oder viel besser: std::string statt char-Arrays.

    edit: Oh, habe _matzes edit nicht gesehen. Hatte sich also schon erledigt.



  • so nun funktionierts xD
    mit std::string^^
    ähm @asc ich hab die anderen Themas noch nciht gemacht deswegen^^
    bei der auswahl springt er ja in die jeweiligen themen dann rein 😉
    danke für eure hilfe...
    war ja net schwer xD
    so lang mach ich es noch net deswegen bin ich auf diese lösung net gekomm

    für mich als obernoob programmierer noch eine frage ähm könnt ihr ein tolles Tutorial empfehlen!?

    Als Systemintegrator gehörts in den ersten 2 jahren leider dazu in der ausbildung deswegen muss ich mich mehr oder weniger damit beschäfitgen^^ aber danke für die schnelle lösung und so^^

    aber solange ich dann immer bissl erfolg hab machts auch ein wenig spaß 😃



  • SeppJ schrieb:

    matze_s edit

    Hey, der Unterstrich gehört da aber nicht hin! 😉 😃


  • Mod

    _matze schrieb:

    SeppJ schrieb:

    matze_s edit

    Hey, der Unterstrich gehört da aber nicht hin! 😉 😃

    Ups. Korrigiert!


Anmelden zum Antworten