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

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

1

08.10.2009, 03:19

[GELÖST] Satz aus .txt auslesen und ausgeben

Hi leute,
ich habe das Problem dass ich irgendwie nicht weiß wie ich ein Wort aus einer
stinknormalen Textdatei auslesen kann.

Hab folgenden code geschrieben aber ich bekomme dann immer nur die Adresse...
Wie kann ich den Inhalt auslesen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>

using namespace std;

//Hauptprogramm

int main()
{
    //Variable

    fstream filestr;

    //Datei öffnen

    filestr.open ("test.txt", fstream::in | fstream::out | fstream::app);

    //Datei schließen

    filestr.close();

    cout << filestr << endl;

    return 0;
    system("PAUSE");
}


Lasst nur mein system("PAUSE") aus dem Spiel :D

EDIT: Code ausgebessert
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

killmichnich

unregistriert

2

08.10.2009, 06:29

also wenn ich das jetzt richtig sehe öffnest du die Datei und schließt sie wieder ohne was einzulesen. Ich würds mal mit filestr.read(...) versuchen, vllt klappts dann ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

08.10.2009, 09:07

Wie schon gesagt wurde: Du liest aus deiner Datei nichts ein. Nachdem du ja nur ein Wort willst sollte der operator >> dafür eigentlich bestens geeignet sein. einen fstream kannst du gleich verwenden wie cin/cout...

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

4

08.10.2009, 17:06

Außerdem ist fstream::app in Kombination mit fstream::in völliger Schwachsinn und führt wahrscheinlich zu undefiniertem Verhalten. Und fstream::out zu verwenden wenn du nichts in die Datei schreiben willst nützt auch nicht sehr viel
Probier's mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Datei mit dem Konstruktor öffnen; alternativ geht natürlich auf open()

fstream file("test.txt", fstream::in/*Da du nur aus der Datei lesen willst*/);

// ein Wort aus der Datei mithilfe des Operators >> einlesen

char[20] ein_wort;
file >> ein_wort;

// ein Wort aus der Datei mithilfe der Memberfunktion getline() einlesen

file.getline(&ein_wort, 20); // liest max. 20 Zeichen bis zum nächsten Leerzeichen


// 20 Zeichen aus der Datei mithilfe der Memberfunktion read einlesen

file.read(ein_wort, 20)

// alle Zeichen bis zum nächsten '.' einlesen (max 20)

file.getline(&ein_wort, 20, '.');

//...

//...


// Eingelesene Zeichen ausgeben

cout << ein_wort;


btw.: Warum schreibst du zweimal using namespace std; und warum bindest du fstream und iostream zweimal ein? Auch wenn wir es aus dem Spiel lassen sollen, warum rufst du system("pause") nach dem return 0 auf?
Signaturen werden überbewertet

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

5

08.10.2009, 22:23

ok sagen wir so, es hat fast geklappt.

Hier mal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream> 
#include <fstream> 

using namespace std; 

//Hauptprogramm 

int main() 
{ 
    //Variable 

    fstream file;
    char Zeichenfolge[20];
    
    //Datei öffnen 

    file.open ("test.txt", fstream::in);

    //Datei auslesen

    file.read (Zeichenfolge, 19);

    //Datei schließen 

    file.close(); 

    //Inhalt ausgeben

    cout << Zeichenfolge << endl;

    system("PAUSE"); 
    return 0; 
    
}


Wenn in der Textdatei "Hallo" steht, kommt "Hallo↕". Vl liegts daran dass die Textdatei im ANSI code gespeichert wird, ich weiß es leider nicht.

Und den "system" Befehl hab ich nach dem Return weil ich kurzzeitig probleme damit hatte wenn er vor dem return stand.. was aber (anscheinend) egal ist.

EDIT: hab gerade durch zufall herausgefunden dass die Konsole "Patrick" normal darstellt, andere Namen wiederum nicht...
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

08.10.2009, 23:18

Deine "Zeichenfolge" ist nicht 0-Terminiert.

C-/C++-Quelltext

1
char Zeichenfolge[20] = {0};

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

7

08.10.2009, 23:50

Zitat von »"David_pb"«

Deine "Zeichenfolge" ist nicht 0-Terminiert.


Es funktioniert :D:D:D

Dankeschön :D
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

8

16.10.2009, 02:06

Ich möchte jetzt gerne ein >Wer wird Millionär< in der Konsole schreiben.
Mein einziges Problem wär eben dass ich nicht viel bis keine Erfahrung beim Auslesen von Textadeien habe.
Wobei es noch besser wär wenn die Datei nachher im Binärcode gespeicherd wird.
Naja es sollten halt die Fraen aus einer Binär Datei ausgelesen werden und per zufall dann ausgegeben werden, somit kann man die richtigen antworten dann nicht nachsehen.
Mit ios::binary müsste das sehr gut umsetzbar sein denke ich mir...

Falls ich mich unklar ausgedrückt habe, so stelle ich mir das vor:
001---------- //1. Zeile -> nummer der frage
FRagestellung... bla bla bla //2. Zeile -> Frage
Antwort A //
Antwort B //
Antwort C //3. - 6. Zeile -> Antworten
Antwort D //
Richtige Antwort A //7. Zeile -> Richtige Antwort
002---------- //8. und wieder von vorne
nächste Frage bla bla..
usw.....

Kennt jemand ein Tutorial wo ich mir das dann genau ansehen kann?

Sizzla
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

9

16.10.2009, 13:26

Wenn du verhindern willst, dass die richtigen Antworten nicht aus der Datei erkennbar sind, dann musst du den Text verschlüsseln, denn wenn du in einer Datei, egal ob binär oder nicht, Zeichenketten speicherst, dann kann man diese ganz einfach z.B. mit dem Windows Editor öffnen und lesen.
Eine sehr einfache, und leicht zu implementierende (aber nicht sehr sichere) Verschlüsselungsmethode ist z.B. das Caesar-Chiffre
Signaturen werden überbewertet

Gon

Treue Seele

Beiträge: 262

Wohnort: Nahe München

Beruf: Schüler (9. Klasse Gymnasium)

  • Private Nachricht senden

10

16.10.2009, 14:31

also da ja immer nur einer der vier Buchstaben A B C und D richtig sein kann, kommt man glaub ich auch sehr schnell drauf, wenn z.B. man statt A jetzt E, statt B F, statt C G und statt D H nimmt, sodass es dann E F G H heißt... ;)

also ich würde einfach an der Ehrlichkeit der Spieler appelieren, schließlich soll es ja Spaß machen, und was bringt es dem Spieler, wenn er die Lösung nachschaut? :)

Werbeanzeige