JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=f75708027d1fc956e832870215825232Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Blödes Problem bei fscanf

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 17:17    Titel: Blödes Problem bei fscanf Antworten mit Zitat

Code:

char LevelName[200];
[..]
fscanf(datei,"%s",&LevelName);
writetext(215,524,LevelName);


In der Datei steht "Testname Name"...
Er gibt aber bloß "Testname" aus...
Das hinter dem Leerzeichen fehlt...

Weiß jemand woran das liegt???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 17:47    Titel: Antworten mit Zitat

Mit fgets funktioniert es bei mir Confused
Probier mal mit fgets. Oder muss es fscanf sein?
_________________
Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 18:20    Titel: Antworten mit Zitat

nepomuk hat Folgendes geschrieben:
Mit fgets funktioniert es bei mir Confused
Probier mal mit fgets. Oder muss es fscanf sein?


Wenn du mir die obige so umschreibst das es mit fgets geht, nehm ich auch die...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 18:21    Titel: ... Antworten mit Zitat

probier mal:
Code:

fscanf(datei,"Testname %s",&LevelName);

Dann müsste Levelname = "Name" sein, wenn ich mich nicht irre!



Nachtrag:
Code:

fscanf(datei,"%s %s",&Name1,&Name2);

Hier müsste Variable "Name1" = "Testname" sein, und Variable "Name2" = "Name"!


Zuletzt bearbeitet von Mr.X am 25.06.2003, 18:28, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 18:24    Titel: ... Antworten mit Zitat

P.S.: fgets liefert Dir die komplette Zeile:
Code:

  LevelName = fgets(datei,255);

(oder so ähnlich Wink )

Dann würde die Variable "Testname Name" enthalten!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 20:08    Titel: Antworten mit Zitat

Sonst kannst dus auch im Binärformat machen(siehe Scriptsprachentut auf meiner Hp)
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 20:59    Titel: Antworten mit Zitat

Benutzt denn hier kein Schwein die STL? So einfach geht das. ;)

Code:

#include <iostream>
#include <fstream>

using namespace std;

void main()
{
   string line;
   ifstream input("datei.txt");

   getline(input, line);

   cout << line;
}

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.06.2003, 21:01    Titel: Antworten mit Zitat

Und wenn man einzelne Werte einlesen will, macht man das am einfachsten so:

Code:

player.bmp
32
64
6
0.2
LOOP

Code:

#include <iostream>
#include <fstream>

using namespace std;

void main()
{
   string bitmap, type;
   int width, height, frames;
   float delay;
   
   ifstream input("test.txt");

   input >> bitmap >> width >> height >> frames >> delay >> type;
}

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gl_echse
JLI'ler



Anmeldedatum: 01.01.2003
Beiträge: 105

Medaillen: Keine

BeitragVerfasst am: 26.06.2003, 16:02    Titel: Antworten mit Zitat

Tja, es gibt immernoch die kleinen Kinder die c mit soße coden;) Nehmt doch streams (wie Hazel). Ist das so schlimm mal keine billighacks zu verwenden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 39
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 26.06.2003, 18:29    Titel: Antworten mit Zitat

Hi,
um wenigstens nochmal klar auf den Tisch zubringen, warum fscanf nur den ersten Teil des Strings einliest.
Dies liegt daran, wie inzwischen wahrscheinlich unschwer zu erkennen ist daran, dass jegliche scanf-Funktionen ein Leerzeichen als Token interpretieren.
Dies kann Nachteile haben, wie weiter oben von underberg erwähnt, kann aber auch Vorteile haben...
bspw:

Code:
int w,h,d;
scanf("%i",&w);
scanf("%i",&h);
scanf("%i",&d);


Um bspw. Auflösung einzulesen...
Und so könnte der Benutzer dies dann eingeben

Code:
800 600 32
und dann erst nach dem dritten Wert mit Enter die Eingabe beenden, so erhalten die nachfolgenden scanf ihr Werte.

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 27.06.2003, 15:59    Titel: Antworten mit Zitat

Starwash hat Folgendes geschrieben:
Dies liegt daran, wie inzwischen wahrscheinlich unschwer zu erkennen ist daran, dass jegliche scanf-Funktionen ein Leerzeichen als Token interpretieren.


Nope. Leerzeichen werden als Delimiter interpretiert, also als Trennzeichen zwischen den Tokens. Ich hab mir mit Hilfe der STL einen Tokenizer geschrieben, bei dem man selber bestimmen kann, was ein Delimiter ist und was nicht. Die Funktion liefert dann einen Vektor mit allen Tokens zurück.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 39
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 28.06.2003, 10:25    Titel: Antworten mit Zitat

Oh,
shit....da hab ich was verwechselt! => Nochmal nachlesen, um es wieder zu festigen!
Ich meinte jedoch natürlich Trennzeichen, wie ja auch aus dem Rest meines Posts hervorgehen dürfte.
*Ärger*

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum