Bitte um Hilfe (C++) - Probleme mit einer von mir entwickelten Software & Fragen



  • Hallo,

    ich bin noch Programmieranfänger (Aber KEIN blutiger :-)) und
    habe mich für C++ entschieden.
    Da ich gerne nach dem "learning by doing" Verfahren vorgehe, habe ich mich gleich an die Enwicklung eines (simplen) Spiels gemacht (und zwar NICHT über google.de -> c-plusplus.net -> kopieren -> einfügen = Spiel fertig! Nein , ich habe mir wirklich slebst Gedanken gemacht!).

    Nun gibt es jedoch ein paar Bugs die ich ohne Hilfe nicht fixen kann:

    1. Der Spieler soll seinen Namen eingeben, aufgrund der Formatierung wollte ich diesen auf 10 Zeichen begrenzen. Das habe ich über char name[10]; gemacht.
    Nun besteht aber folgenders Problem: wenn der Benutzer einen längeren Namen eingibt, wird die nächste Anweisung (cin >> name_gegner[10];) einfach übrsrpungen - Warum?

    2. Gibt es ausser Fmod und Open AL noch eine andere SoundLib für Windows?
    Die Lib muss nur das simple abspielen von .wav und .mp3 Dateien unterstützen.

    Um das Forum nicht unnötig zu "belasten" folgen weitere Fragen in diesem Thread...

    Danke



  • IloveAMD2006 schrieb:

    ich bin noch Programmieranfänger (Aber KEIN blutiger :-)) und habe mich für C++ entschieden.

    Dann geh doch eine Etage tiefer, dort findest du das C++-Forum.

    1. Der Spieler soll seinen Namen eingeben, aufgrund der Formatierung wollte ich diesen auf 10 Zeichen begrenzen. Das habe ich über char name[10]; gemacht.
    Nun besteht aber folgenders Problem: wenn der Benutzer einen längeren Namen eingibt, wird die nächste Anweisung (cin >> name_gegner[10];) einfach übrsrpungen - Warum?

    Weil da noch Zeichen im Eingabepuffer stehen - die bekommst du mit cin.ignore(cin.in_avial()); raus, bevor du weitermachen kannst.



  • Zu 1. Na weil nur 10 Zeichen in das Namensfeld passen. Wo soll der Rest Deiner Meinung nach hin? 😃

    Nimm lieber string statt char[10] und prüfe nach dem Einlesen die Länge ab. Und achja: Für C++ gibts ein C++-Forum, direkt unter dem ANSI-C 😉



  • Oh man - so schnell geantwortet und sofort weitergeholfen - Danke.

    PS: Upps, sorry wegen dem falschen Forum... eerde etwas besser Aufpassen...



  • IloveAMD2006 schrieb:

    ich bin noch Programmieranfänger (Aber KEIN blutiger :-)) und
    habe mich für C++ entschieden.

    Das C++-Forum ist eins weiter, hier gehts um ANSI-C.

    Da ich gerne nach dem "learning by doing" Verfahren vorgehe,

    Bei C++ keine gute Idee, weil du auf die meisten Fehler nicht durch Fehlermeldungen oder Warnungen aufmerksam gemacht wirst. Einige äußern sich noch nichtmal während der Laufzeit, jedenfalls nicht anfangs, und plagen dich erst später.

    1. Der Spieler soll seinen Namen eingeben, aufgrund der Formatierung wollte ich diesen auf 10 Zeichen begrenzen. Das habe ich über char name[10]; gemacht.

    Damit hast du zwar den Speicherplatz für den Namen auf 10 Zeichen (inklusive Stringendezeichen, also eigentlich nur 9 Zeichen Platz) begrenzt, aber nicht die Eingabe. So du nicht anderweitig noch spezielle Vorkehrungen getroffen haben solltest, hast du hier einen klassischen Buffer-Overflow produziert.

    Nun besteht aber folgenders Problem: wenn der Benutzer einen längeren Namen eingibt, wird die nächste Anweisung (cin >> name_gegner[10];) einfach übrsrpungen - Warum?

    Weiß ich nicht, ich weiß ja nicht, wie du den namen einlesen läßt. Ein bisschen Code zu posten ist nie verkehrt.

    Zur zweiten Frage hab ich keine Ahnung.

    EDIT: OMG, wie kann man SO langsam sein.



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C 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.



  • die anweisung

    cin >> name_gegner[10];
    

    liest nur ein einzelnes zeichen ein und speichert es an der stelle name_gegner[10]. da du name_gegner ja als char name_gegner[10] deklariert hast, bekommst du eine speicherbombe! denn der index von name_gegner geht nur von 0 bis 9. du solltest, wenn du schon in c++ programmierst, besser die string-klasse verwenden:

    #include<string>
    
    using namespace std;
    
    string name_gegner;
    

    c-char-arrays mit cin einzulesen ist ziemlich haarig.



  • Danke...

    und wie funktioniert dann die Ausgabe ? Cout << , oder anders?


Anmelden zum Antworten