Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Irgendeine Klasse hat da also eine Sort-Methode? Wie sieht die genau aus? Möglicherweise kann man bei der Sort-Methode, die du da benutzt, ein eigenes Sortierprädikat angeben. Ich kenne die Methode nicht, diese Information müsstest du in der Dokumentation nachlesen. Wenn das nicht geht, musst du entweder von Hand sortieren, oder, wie bereits gesagt, die Daten in einen Container kopieren, mit dem std::sort zurechtkommt.
  2. So ähnlich. Der erste Parameter ist der Ziel-String. Der zweite ist der Formatstring, der bestimmt, was und wie in den Zielstring geschrieben wird. Dazu dienen die Formatfelder im Formatstring, das sind diese Dinger mit dem Prozentzeichen. Hier findest du eine Referenz: printf - C++ Reference Die nachfolgenden Parameter werden von links nach rechts den jeweiligen Formatfeldern zugeordnet, und entsprechend in den Zielstring geschrieben.
  3. In welcher Nachrichtenbehandlungsfunktion willst du das denn verarbeiten? Dein Dialog hat ja gar keine.
  4. Wieso nicht? Du erstellst ihn doch. Zeig doch mal, wie du den Button erstellst. Was soll das sein? Der Button schickt Nachrichten an sein Elternfenster, also deinen Dialog. Du gibt aber bei CreateDialogIndirect gar keine DialogProc an, also kannst du auch nicht die Nachrichten des Buttons empfangen. Das ist eher die letzte mögliche. Hast du nicht eben noch geschrieben, du kennst die ID gar nicht?
  5. Ja, das sieht gut aus. Du kannst allerdings den ersten Text nicht einfach mit einer Zuweisung hineinkopieren, sondern musst dafür strcpy verwenden.
  6. Klotzkopp

    Spiel in C++

    Vermutlich möchte Flanders86 mit seinem zugegebenermaßen wenig hilfreichen Beitrag ausdrücken, dass er dein Anliegen für etwas daneben hält. Leider schreibst du nicht, welche Vorkenntnisse du hast, und wieviel Zeit du für dieses Projekt hast. Es ist oft so, dass gerade Anfänger den Aufwand für die Erstellung vermeintlich "einfacher" Spiele massiv unterschätzen.
  7. Ein char ist nur ein einzelnes Zeichen. Wenn du in C mit Zeichenketten arbeiten willst, musst du char-Arrays verwenden. Du bist übrigens dafür verantwortlich, dass diese Arrays groß genug sind.
  8. Es wäre toll gewesen, wenn du uns das auch verraten hättest. Bisher hast du immer nur davon gesprochen, dass ein "Anschein erweckt" wird. Wenn du schon weißt, wo das Programm aussteigt, dann konzentriere ich darauf, warum es an dieser Stelle aussteigt. Schau dir die Werte der Variablen an.
  9. Du kannst dein Programm auch mit Diagnosemeldungen zupflastern, so dass du am Ende an der Ausgabe nachvollziehen kannst, was passiert ist.
  10. Genau. Das Array muss immer um 1 länger sein, als der Text, der drinstehen soll. Zunächst solltest du einfach in Einzelschritten durch dein Programm laufen, damit du siehst, wo es überhaupt aussteigt. Welche Entwicklungsumgebung bzw. welchen Compiler benutzt du denn?
  11. Ja, es wäre schon ganz gut, wenn das, was du reinschreibst, auch reinpasst. Wenn du nicht den richtigen Code zeigst, können wir uns die Fehlersuche gleich sparen. Ohne dir zu nahe treten zu wollen: Wenn du in der Lage wärest, zu beurteilen, welcher Teil des Codes mit dem Fehler zu tun hat, hättest du dein aktuelles Problem nicht. Was sagt denn jetzt der Debugger?
  12. Und praktisch jede Stringfunktion aus C - also z.B. auch sprintf - hängt eine Stringende-Markierung an ('\0'), die dann im Speicher hinter deinen Arrays landet -> Undefiniertes Verhalten. Die Schleife wird zumindest einmal ausgeführt. Prüf es doch mal mit dem Debugger. Da du in der Schleifenbedingung eine Variable benutzt (Prozent), die sonst nirgendwo im gezeigten Code auftaucht, können wir dir da kaum weiterhelfen. Mich wundert, dass das überhaupt mal funktioniert hat, da Prozent ja nirgends geändert wird.
  13. Wie genau bricht es denn ab, also mit welcher Meldung? Mir fällt auf, dass die Arrays Jahr und Woche zu klein sind, vielleicht auch filewrite, das hängt davon ab, was NAME_LENGTH ist. Vielleicht solltest mal allgemein prüfen, ob nicht auch noch an anderen Stellen über Arraygrenzen hinaus zugreifst.
  14. Normalerweise brauchst du zum Sortieren zwei Dinge: Die Möglichkeit, zwei Einträge zu vergleichen und zu entscheiden, welcher weiter oben stehen soll. Wie dieser Vergleich aussieht, musst du entscheiden. Die Möglichkeit, zwei Einträge zu vertauschen. Das musst du nicht direkt in deinem Steuerelement machen, du kannst die Daten vorher auch in einen passenden Container kopieren, oder nur die Indizes sortieren. Wenn du diese beiden Funktion hast, kannst du praktisch jeden Sortieralgorithmus auf deine Daten anwenden. Wenn du die Daten in einen Container der C++-Standardbibliothek packst, kannst du sogar direkt std::sort benutzen. Siehe dazu meine Signatur.
  15. Ein Problem bekommst du dabei nur, wenn deine Datenquelle eine andere Codierung als deine Ausgabe benutzt. Unter Windows beispielsweise benutzen die meisten grafischen Editoren die Codepage 1252 (oder gleich UCS-2, eine Untermenge von UTF-16), die Eingabeaufforderung benutzt aber Codepage 437 oder etwas Ähnliches. In diesem Fall musst du die Strings umwandeln, z.B. mit MultiByteToWideChar/WideCharToMultiByte. Unter Linux könntest du dir mal die Funktionen in iconv.h anschauen. Aber wie gesagt, zuerst solltest du prüfen, ob du überhaupt unterschiedliche Codierungen hast. Wenn du Umlaute in den Stringliteralen in deinem Code hast (was laut Standard sowieso nicht erlaubt ist), dann kommt es darauf an, welche Codierung dein Quellcodeeditor benutzt
  16. Sollte es aber. Wenn es bei dir nicht der Fall ist, liegt das wohl daran, dass du mit zwei unterschiedlichen Codierungen hantierst, d.h. die Daten, die du in den String packst, sind anders codiert, als es die Ausgabe erwartet. Woher kommen die Daten denn, und wie gibst du sie aus?
  17. Ich verstehe das Problem nicht. In was sollen diese Sonderzeichen denn gewandelt werden? Gib doch mal ein Beispiel. Was wird eingegeben, und was soll hinterher im String stehen?
  18. Ein paar Anmerkungen hätte ich noch: Den Faktor sizeof(char) könntest du weglassen, der ist laut Definition 1. Er schadet natürlich auch nicht, und wenn du dir das so angewöhnst, vergisst du es auch bei anderen Typen nicht so leicht. Zweitens castest du den Rückgabewert von malloc. Das ist in C nicht notwendig, und kann sogar unter bestimmten Umständen Fehler verdecken. Die (char *)-Casts sollten also besser raus. Drittens kannst du auf das Semikolon am Ende eines Else-Blocks verzichten
  19. Richtig. Durch diesen zweiten Fehler macht sich das fehlende Speichermanagement später bemerkbar. Statt direkt dorthin einzulesen, wo deine uninitialisierten char-Zeiger hinzeigen, liest du dorthin ein, wo diese Zeiger selbst im Speicher liegen. Du schreibst also Text dorthin, wo eigentlich Adressen stehen sollten. Da deine Struktur auf dem Stack liegt, geht das offenbar noch gut - auch wenn es undefiniertes Verhalten ist. Das Programm stürzt aber dann ab, wenn du versuchst, bei der Ausgabe den eingelesenen Text als char-Zeiger zu interpretieren. Ja.
  20. In deinem Programm fehlt die Speicherverwaltung komplett. Du hantierst hier mit Zeigern, ohne dich auch nur im Geringsten darum zu kümmern, dass die auch auf gültige Speicherbereiche zeigen. In C ist das Bereitstellen des Speichers deine Aufgabe. Solange du nur mit Stringliteralen hantierst, und nur lesend darauf zugreifst (ds1), geht das noch gut. Danach knallts aber. Und bei scanf & Co. musst du bei der Verwendung von %s einen Zeiger auf char angeben, nicht dessen Adresse. Dieser Fehler dürfte der Grund sein, warum es nicht sofort beim fscanf knallt. Falsch ist es trotzdem.
  21. Die Warnung C4786 kannst du getrost ignorieren. Der VC6-Debugger hat bei der Länge der Bezeichner eine Beschränkung auf 255 Zeichen. Durch die verschachtelten Templates der Standardbibliothek ist diese Grenze schnell erreicht, das hat aber keine Auswirkung auf die Lauffähigkeit des Programms. Allerdings hast du da ein anderes Problem: Dein Schlüssel-Typ ist char*. Das ist insoweit problematisch, dass std::map den operator< benutzt, um die Elemente zu sortieren. Der Kleiner-Operator für char* vergleicht aber nur die Adressen der Strings, nicht die Inhalte. Das funktioniert zwar, aber die Sortierungsreihenfolge wird alles mögliche sein, nur nicht alphabetisch. Du könntest ein benutzerdefiniertes Sortierprädikat als dritten Templateparameter angeben. Einfach ist es IMHO aber, wenn du als Schlüsseltyp std::string benutzt.
  22. MSVC 6 ist sehr alt. Selbst vier Versionen später, in VC 2008, sind die Erweiterungen des TR 1 (und dazu zählt ext/hash_map, soweit ich weiß) nur als Zusatzpaket verfügbar. Eine Hashmap brauchst du aber IMHO gar nicht, eine einfache Map tut's auch. Der Header dazu heißt <map>, und der sollte auch in VC6 zu finden sein.
  23. Verschoben -> Windows Betriebssysteme
  24. Klotzkopp

    i += i++ + ++i

    Das Problem ist hier nicht der Unterschied zwischen Prä- und Postinkrement. Das machen die Compiler schon richtig. Das Problem ist, dass in C und C++ nicht festgelegt ist, ob zuerst der linke oder der rechte Operand des + Operators ausgewertet wird, und wann sich der Nebeneffekt des Postinkrementoperators auswirkt. Laut Standard muss das nur vor dem nächsten "Sequence Point" sein. In diesem Fall ist der Sequence Point am Ende dieser ganzen Anweisung. Wie gesagt, der Wert dieses Ausdrucks ist in C und C++ ganz offiziell nicht definiert. Es bringt eigentlich nichts, sich darüber Gedanken zu machen, was bei diesem oder jenem Compiler dabei herauskommt. Der Code ist (zumindest in diesen beiden Sprachen) nicht standardkonform. Ein Entwickler, der sich darauf verlässt, dass dieser Code etwas bestimmtes tut, arbeitet IMHO unverantwortlich. Soweit ich weiß, ist in Java das Ergebnis festgelegt. In .NET ist es das vermutlich auch. Keine Ahnung, wie es bei Perl aussieht.
  25. Klotzkopp

    Daten Filtern

    Vielleicht ist dir die Ironie in MartinSts Beitrag nicht aufgefallen. Es wäre extrem hilfreich, wenn du verraten würdest, mit welcher Datenbank und mit welchem BASIC-Dialekt du arbeitest. Es würde mich doch sehr wundern, wenn du SQL direkt in deinen BASIC-Quellcode schreiben könntest. Das SQL-Select hat mit dem BASIC-Select nichts zu tun.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...