Ergebnis 1 bis 18 von 18

Thema: C++ Fehler

  1. #1

    C++ Fehler

    Hi! Ich fange gerade an C++ zu elrnen, und jetzt sagt mir das Ding das hier ein fehler drinne ist:

    #include <iostream.h>.

    void main()
    {
    cout << "Hi! Ich bin dein PC! Wer bist du?\n";
    cin >> name;
    #ifdef name
    cout "Hallo" name;
    #endif
    }
    Dabei steht es in dem buch mit dem ich lerne das es so klappen müsste!

    Ich blicks net mehr...

  2. #2
    probiers mal so ...

    Zitat Zitat
    #include <iostream>
    #include <string>

    using namespace std;

    int main(int argc, char** argv)
    {
    cout << "Hi! Ich bin dein PC! Wer bist du?"<<endl;
    string name;
    cin >> name;
    cout << "Hallo " <<name<<endl;
    return 0;
    }
    Ich kann schon gar nicht mehr zaehlen, wieviele bloedsinnige Fehler in dem Beispiel waren ... Ich bin sogar versucht, zu fragen, fuer welche Sprache der Beispielcode war ... An deiner Stelle wuerde ich das Buch wechseln .... zumindest wenn der Code wirklich dort so drin steht ...

    Geändert von Ineluki (28.06.2005 um 13:23 Uhr)

  3. #3
    Sooo steht er auch net drin, aber da steht nischt von dem #include <sring> usw...

    Und auch nichts davon wie das mit dem Main sein muss... verwirrend...^^


    Danke Ineluki!


    PS:Was macht das return 0; ??

    Geändert von raian (28.06.2005 um 17:41 Uhr)

  4. #4
    Oder probier es so:
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
        char name[20];
        cout<<"Hi! Ich bin dein PC! Wer bist du?\n";
        cin>>name;
        cout<<"Hallo "<<name;
    
        char a;
        cin>>a;
        return 0;
    }
    (Maximal 20 Buchstaben, keine Leerzeichen eingeben!)
    Ist etwas unflexibel, dafür ohne extra String-Header.

    Der Rückgabewert der Mainfunktion muss immer int sein. Dein Buch behandelt eine veraltete Schreibweise wie es früher mal gängig war, mit void.
    Die Parameter in der Main-Funktion von Ineluki kannst du auch weglassen, lass die Klammern einfach leer, ist einfacher. (Und afaik ist Lukis Variante eine C-Main-Funktion.)

    Return 0 bedeutet, dass die Funktion den Rückgabewert 0 zurückgibt. Wird genutzt um Fehler zurückzugeben, 0 bedeutet hier dann also, korrekt beendet, ohne Fehler.
    Merk dir einfach, wenn du später eigene Funktionen hast, kannst du per Return einen Wert zurückgeben lassen.

    Ansonsten hast du bei cout noch einmal die spitzen Klammern (<<) vergessen gehabt, sowie die alte Header-Schreibweise iostream.h ist veraltet. Hier gilt, ohne .h, dafür ein using namespace std; darunter schreiben.

  5. #5
    Okay...und was zum teufel ist hier falsch?

    #include <iostream>
    #include <string>

    using namespace std;

    int main(int argc, char** argv)
    {
    cout << "Hi! Ich bin dein PC! Wer bist du?"<<endl;
    string name;
    cin >> name;
    cout << "Hallo, " <<name<< "!" <<endl;
    cout << "Wie gehts dir?\n";
    string feel;
    cin >> feel;
    #if (feel == gut)
    cout << "Dir gehts gut?Das freut mich aber!\n";
    #elif (feel == schlecht)
    cout << "Wie schade...\n";
    #else
    cout <<"Ahja...\n";
    #endif
    return 0;
    }

    Gibt keinen fehler aus, aber egal was ich mache, es gibt aus:

    Dir gehts gut?Das freut mich aber!



    *grummel* C++ ist äußerst schwer... aber was solls? Ich wills lernen^^

  6. #6
    #if, #elif und #else sind Praeprozessoranweisungen

    Die werden ausgewertet, bevor dein Programm ueberhaupt compiliert wird, z.B. um verschiedenen code fuer verschiedene Betriebssysteme zu erzeugen oder automatisch Text durch anderen Text zu ersetzen.

    Das was du suchst, ist if und else ... ausserdem musst du gut und schlecht in "" setzen, da du einen string mit einem anderen String vergleichen willst

    Code:
    ...
    if (feel == "gut")
      cout << "Dir gehts gut?Das freut mich aber!"<<endl;
    else 
      if (feel == "schlecht")
         cout << "Wie schade..."<<endl;
      else cout <<"Ahja..."<<endl;
    ...

  7. #7
    Und Code-Tags setzen verhilft zur besseren Lesbarkeit.

  8. #8

    Users Awaiting Email Confirmation

    Zitat Zitat von Ynnus
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
        char name[20];
        cout<<"Hi! Ich bin dein PC! Wer bist du?\n";
        cin>>name;
        cout<<"Hallo "<<name;
    
        char a;
        cin>>a;
        return 0;
    }
    Dies ist aber ein gefährlicher Lösungsansatz, der bei einem zu langen Namen zu einem Bufferoverflow und damit Programmabsturz führt. Solange der Applikationsbenutzer deine vorgegebenen Regeln einhält, ist alles im Lot. Allerdings sind Menschen keine Maschinen, und deshalb machen wir schneller Fehler als uns lieb ist.

    Code:
    char buffer[100];
    cin.get(buffer, 100, '\n');
    Mir ist klar, dass das Ganze natürlich nur ein Beispiel von dir war und daher nicht druchgängig hieb- und stichfest sein muss. Aber grade, wenn man einem Anfänger helfen will, sollte man imo (vielleicht dann sogar besonders) auf solche Tücken hinweisen.

    Küsschen,
    Feenstaub.

  9. #9
    Hmmm?

    Gibts bei C++ kein Elseif (elif) ?

  10. #10
    @ Feenstaub:
    Sicherlich magst du Recht behalten, aber trotzdem glaube ich, interessiert ihn jetzt noch kein Überlauf irgendwelcher Speicherstellen, wenn schon ein simples Hello World Probleme macht. Es war ja mehr ein Beispiel zum Ansehen der Syntax nicht der Vorgehensweise für Stringoperationen.
    Aber da du ihn ja nun drauf aufmerksam gemacht hast, hat sich das ja nun auch geklärt.

    Übrigens muss ich mich noch korrigieren, bei meinem obigen Code dürfen maximal 19 Zeichen, nicht 20, eingegeben werden.

    Code:
    Gibts bei C++ kein Elseif (elif) ?
    Das wird hier else if() geschrieben.
    Dir würde es nicht schaden, wenn du dir ein grundlegendes Tutorial über C++ ansehen würdest, da werden solche einfachen Fragen direkt geklärt.

  11. #11
    Hi Leuts. ich fang auch gerade an und hab schon n paar Tuts gemacht. Ich dachte, der Fehler liegt an dem vielleicht verältertem Tut aber als der gleiche Fehler auch bei Ineluki's Code ganz unten zur Verbesserung von dem alten Tut aufgetreten ist, wurde ich doch stutzig:
    Nachdem man den Namen eingibt (bz auf ineluki's code), geht man aus dem Programm.

    Kann das an meinem Compiler liegen? Ich habe Dev-C++ Version 5...

  12. #12
    Zitat Zitat von der verzweifelte
    Nachdem man den Namen eingibt (bz auf ineluki's code), geht man aus dem Programm.
    Kann das an meinem Compiler liegen? Ich habe Dev-C++ Version 5...
    Liegt wohl daran, dass sich das Programm sofort nach der Ausgabe des Namen beendet, denke ich. Ynnus hat ja ein
    Code:
    char a;
    cin>>a;
    return 0;
    eingebaut, um zu verhindern, dass sich das Programm sofort beendet. Alternativ könntest du das unter (Win)Do(w)s auch mit dem Befehl 'Pause' regeln:
    Code:
    system("PAUSE");
    return 0;
    Oder mit dem Include <conio.h> könntest du auch folgendes schreiben:
    Code:
    getch();
    return 0;
    Gibt eigentlich unzählig viele Möglichkeiten, um das Programm am Beenden zu hindern. Ich nutze meistens getch().
    Öhm, achso: Oder man startet das Programm über die Konsole. Dann bleibt der ausgegebene Text auch lesbar.

    freundliche Grüße, Rolus

  13. #13
    Vielen Dank. Ich probier gleich mal die Möglichkeiten aus.
    Falls es (nicht) klappt, meld ich mich und Bedanke mich (nicht)^^
    Edit :
    Alles klar, es funzt. Hab den Fahler alleine gefunden. Bei Inelukis Code ganz unten ist
    kein Befahl eingegeben, der das Programm am sofortigen Beenden aufhalten könnte.
    Ich hab das Tut noch ein bisschen erweiter, nur so zu rumprobieren:

    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
        char name[1000];
        char zahl[10000];
        cout<<"Hi! Ich bin dein PC! Wer bist du?\n";
        cin>>name;
        cout<<"Hallo "<<name;
        cout<<"\n";
        cout<<"Was ist denn deine Lieblingszahl? (max 10.000 Zeichen] \n";
        cin>>zahl;
        cout<<"Geilo! Meine Lieblingszahl ist auch "<<zahl;
        cout<<"\n";
        cout<<"\n";
        cout<<"\n";
        cout<<"Zum Beenden 'Beenden' eingeben und Enter druecken!\n";
    
        char Beenden;
        cin>>Beenden;
        return 0;
    }

    Geändert von Tessio (29.06.2005 um 18:38 Uhr)

  14. #14
    Zitat Zitat
    cout<<"Zum Beenden 'Beenden' eingeben und Enter druecken!\n";
    Du weißt aber schon, dass "Beenden" in deinem Code der Name der Variablen ist und nicht das, was getippt werden muss, zum beenden, oder?
    Und solche Sachen wie 3 mal "\n" in eigene Cout's kann man auch in eine Reihe schreiben:
    Code:
    cout<<endl<<endl<<endl;
    oder geht auch so:
    Code:
    cout<<"\n\n\n";

  15. #15
    hast recht, sry^^
    aber das mit dem beenden funzt.
    is ja so eingecodet, dass die variable beenden heißt und man beenden darin eintippen kann. wenn die variable beenden=beenden ist, wird das prog beendet. ich könnte
    die vari nturlich auch 23~ffg3sfd4 nennen, aber beenden is halt übersichtiger^^

  16. #16
    In eine Char-Variable kannst du nur einen Wert in Byte-Größe eingeben, da char signed (mit Vorzeichen) ist, von -128 bis 127. Das bedeutet, es ist nur ein Buchstabe (in ASCII Form 8 Bit) möglich. Demnach kannst du eben nicht "Beenden" eintippen und in der Variable Beenden speichern. Wenn man mehr als einen Buchstaben eintippt beendet sich das Programm ab dieser Zeile, da nur ein Buchstabe erwartet wird.

  17. #17
    Ausserdem ist das KEIN Fehler ...
    Normalerweise startet man Consolenprogramme auch von der Console aus, oder ?
    Wenn man so ein Tastendrueckgedoens drin hat, und das Programm wirklich mal von der Console startet denkt man wiederum, das Programm ist abgestuerzt, weil es nichts mehr macht. Wenn du sowas schon einbaust, solltest du wenigstens "Zum Beenden Enter druecken." reinschreiben ...

  18. #18
    ok, sorry^^
    ich bin doch nur ein anfänger und arbeite an einem kleinen prog^^

    ps : 100ster beitrag^^

Berechtigungen

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