Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.11.2008, 21:51

Problem mit Textdatei öffnen

Guten Abend

ich hoffe ihr könnt mir bei meinem kleinen Problem helfen.

Als erstes kurz der Problemausschnitt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
ifstream datei;
char string[50] = "Data/Level/";
char end[] = ".txt";
strcat (string,s);
strcat (string,end);

datei.open (string);
    
if (!datei.fail())
{


also "s" ist "Level1" und wenn ich mit dem Debugger das ganze durchgehe, dann ist schlussendlich im string "Data/Level/Level1.txt".
Das sollte auch stimmen, jedoch überspringt er meine If-Abfrage, weil datei.fail() einen Fehler zurückgibt.

Wenn ich aber die beiden strcat auskommentiere und direkt in den string "Data/Level/Level1.txt" schreibe, dann funktioniert alles.


Ich weiss gerade nicht mehr weiter, deshalb hoffe ich, dass ihr mir helfen könnt.

Tracker

Anonymous

unregistriert

2

25.11.2008, 22:05

Warum benutzt du keine StringStreams für diese Aufgabe sondern ein C und C++ Mischmasch?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

25.11.2008, 22:05

Hast du mal probiert dir "string" mit cout ausgeben zu lassen ???

Ich emfehle auch std::string:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
ifstream datei; 
std::string filename = "Data/Level/"; 
std::string end        = ".txt"; 

filename += s;
filename += end;

datei.open (filename.c_str()); 
    
if (!datei.fail()) 
{

4

25.11.2008, 22:19

Danke für die schnellen Antworten.

also ich habe diese Funktionen benutzt, weil ich gerade nur die kannte, aber ich dachte das es trotzdem geht.

@Databyte, ich habe es so übernommen, wie du es mir vorgeschlagen hast, allerdings ging es immer noch nicht.

Aber ich habe den Fehler jetzt doch gefunden. Nach dem "Level1" hat es noch ein "\n" drin. Im Debug-Modus wird zwar "Data/Level/Level1.txt" angezeigt, aber es ist

Data/Level/Level1
.txt

Ich nehme mal schwer an, dass es deshalb nicht geht. Ich werde gleich schauen, ob ich es wegbekomme.

5

25.11.2008, 22:38

Nochmal vielen Dank für die Hilfe, ich habe jetzt das '\n' durch '\0' ersetzt und so geht es.

Das Problem ist jetzt also gelöst und der Thread kann geschlossen werden. :D

Tracker

Beliah

Treue Seele

Beiträge: 115

Wohnort: Söhlde - LK Hildesheim

Beruf: FI-Anwendungsentwicklung

  • Private Nachricht senden

6

25.11.2008, 22:50

Was benutzt du denn um die Eingabe einzulesen?
Mit Cin sollte das eigentlich nicht passieren. (Eben nochmal getestet)

Aber wenn du schon das '\n' ersetzt wieso nicht einfach mit einem Leerzeichen(' ')?
Debuggers don't remove bugs, they only show them in slow motion.

Google Suche ohne Werbung und Cookies: Scroogle

Derzeitige(s) Freizeitprojekt(e)

7

26.11.2008, 07:30

die Eingabe lese ich aus einer anderen Textdatei :D
Dort habe ich eine Liste mit allen Levels. Diese Liste gebe ich dann aus und je nachdem welches ausgewählt wurde,
übergebe ich den String. Weil es aber in der Liste immer ein '\n' am Schluss hat, ging es nicht.
Da ich aber immer auslese bis das '\n' kommt, ist es hald noch im String drin, dann ersetze ich es durch '\0'.

Wenn ich das \n durch ein Leerzeichen ' ' ersetzen würde, dann hätte ich aber
"Data/Level/Level1 .txt" Da wäre dann ein Leerzeichen zuviel.
Oder würde es die Leerzeichen nicht ausgeben?

Beliah

Treue Seele

Beiträge: 115

Wohnort: Söhlde - LK Hildesheim

Beruf: FI-Anwendungsentwicklung

  • Private Nachricht senden

8

26.11.2008, 16:21

Achja, natürlich kein Leerzeichen sondern einfach durch nichts ('').

Wenn ichs mir aber recht überlege ist das eigentlich das gleiche wie '\0'

Welche Funktion benutzt du denn zum einlesen?

ifstream hat da so eine Funktion namens getline die '\n' nicht mit einlesen sollte.

siehe auch hier

Edit:
Moment, benutz lieber das für std::string.
Debuggers don't remove bugs, they only show them in slow motion.

Google Suche ohne Werbung und Cookies: Scroogle

Derzeitige(s) Freizeitprojekt(e)

9

27.11.2008, 15:13

Zitat von »"Beliah"«

Achja, natürlich kein Leerzeichen sondern einfach durch nichts ('').

Wenn ichs mir aber recht überlege ist das eigentlich das gleiche wie '\0'

eigentlich nicht: '' ist einfach überhaupt nix (kann man damit überhaupt Zeichen ersetzen?) und '\0' ist ne Null-Terminierung, die das Ende eines C-Strings signalisiert.

Werbeanzeige