Seite 1 von 1

ifstream

Verfasst: 8. April 2010 23:27
von neuer_user
---

Verfasst: 9. April 2010 09:12
von franzf
Geht doch viel leichter :)

Code: Alles auswählen

ifstream file("test.txt");
string tmp;
while( file ) {
    file >> tmp;
    cout << tmp << endl;
}

Verfasst: 9. April 2010 11:34
von neuer_user
ok, danke ^^

Verfasst: 9. April 2010 13:54
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.. :?:

Verfasst: 9. April 2010 14:14
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.

Verfasst: 9. April 2010 14:14
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

Verfasst: 9. April 2010 14:36
von neuer_user
ups das i++ muss ja danach ^^
aber jetz gehts immer noch nicht

Verfasst: 9. April 2010 14:40
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.

Verfasst: 9. April 2010 14:41
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.