ifstream

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
neuer_user
Beiträge: 13
Registriert: 9. März 2010 20:08

ifstream

Beitrag von neuer_user »

---
Zuletzt geändert von neuer_user am 28. Dezember 2011 00:04, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Geht doch viel leichter :)

Code: Alles auswählen

ifstream file("test.txt");
string tmp;
while( file ) {
    file >> tmp;
    cout << tmp << endl;
}
neuer_user
Beiträge: 13
Registriert: 9. März 2010 20:08

Beitrag von neuer_user »

ok, danke ^^
neuer_user
Beiträge: 13
Registriert: 9. März 2010 20:08

Beitrag von neuer_user »

jetzt bekomme ioch aber ein 'Signal'

Code: Alles auswählen

Signal erhalten
---------------------------
Der Prozess wurde nach Erhalt eines Signals vom Betriebssystem angehalten.
Name des Signals : 
SIGSEGV
Bedeutung : Segmentation fault
---------------------------
OK   
---------------------------
bei

Code: Alles auswählen

sf::Sprite gameObjects[2];
int i;

void readData()
{
    float temp1 = 0;
    float temp2 = 0;
    float temp3 = 0;
    float temp4 = 0;
    std::string imgString;
    sf::Image img;
    i = 0;
    std::ifstream file("data.txt);
    while(file)
    {
	file>>temp1;
	file>>temp2;
	file>>temp3;
	file>>temp4;
	file>>imgString;
	img.LoadFromFile(imgString);
	gameObjects[i] = sf::Sprite();
	i++;
	gameObjects[i].SetPosition(sf::Vector2f(temp1, temp2));
	gameObjects[i].SetScale(sf::Vector2f(temp3, temp4));
	gameObjects[i].SetImage(img);
    }
das hat wohl mit ner zugriffsverletzung zu tun.. :?:
TSS
Beiträge: 73
Registriert: 24. November 2009 15:40
Kontaktdaten:

Beitrag von TSS »

Code: Alles auswählen

gameObjects[i] = sf::Sprite();
   i++;
   gameObjects[i].SetPosition(sf::Vector2f(temp1, temp2));
   gameObjects[i].SetScale(sf::Vector2f(temp3, temp4));
   gameObjects[i].SetImage(img); 
Ich weiß zwar nicht, was genau du hier tun willst, allerdings sieht es für mich merkwürdig aus. Die erste Zuweisung bezieht sich auf gameObjects[0], die folgenden auf gameObjects[1].
Außerdem wäre es interessant zu wissen, wie oft die Schleife durchlaufen wird, also das genau in der Datei steht. Denn wenn i größer als 1 wird, dann ist es klar, dass das Programm abstürzt.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

eventuell liest du ueber das ende der datei?
du liest ja 4 zahlen und einen string hintereinander, ohne dazwischen zu pruefen, ob du ueberhaupt weiterlesen kannst/noch daten zum lesen vorhanden sind.

mfg,
julian
neuer_user
Beiträge: 13
Registriert: 9. März 2010 20:08

Beitrag von neuer_user »

ups das i++ muss ja danach ^^
aber jetz gehts immer noch nicht
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was genau ist "gameObjects"?
std::list, std::vector, oder ein einfaches Array?
Ich nehme mal an dass dein Index "i" größer ist als die Struktur Elemente enthält.
Hast du da eine Liste (vector, list, ...) solltest du neue Elemente mit push_back anhängen, wenn du nicht mit resize() schon vorher genügend Platz beschaffen hast.
neuer_user
Beiträge: 13
Registriert: 9. März 2010 20:08

Beitrag von neuer_user »

das hab ich berher mal versucht mit file.eof() aber irgendwie ging das nicht.
nachdem ich dann QT aktualisiert hab bin ich nicht mehr auf die idee gakommen das nochmal zu prüfen.
Jetzt gehts jedenfalls.
Antworten