Minulla olisi sellainen probleema, että 3D-pelissäni pitäisi lukea .obj tiedostosta eräitä tietoja seuraavanlaiselta riviltä: "v 1.000000 1.000000 1.002692", eli tuosta pitäisi saada nuo kolme lukua talteen muuttujiin. Luvut voivat olla myös eri pituisia ja negatiivisia mutta lukuja on aina kolme ja alku "v":n jälkeen sekä lukujen välissä on välilyönti. Kuinka tämä onnistuu? Olen itse kokeillut jotain mutta en ole onnistunut laisinkaan.
Niin eli tuo rivi on siis taulukko joka on luettu tiedostosta tyyliin "fgets(rivi, 127, tiedosto);".
Voit lukea tiedot merkkijonosta näin:
#include <stdio.h> char rivi[] = "v 1.000000 1.000000 1.002692"; int main(void) { char merkki; double a, b, c; sscanf(rivi, "%c %lf %lf %lf", &merkki, &a, &b, &c); printf("%lf %lf %lf\n", a, b, c); }
Samalla tavalla voit kyllä lukea tiedot suoraan tiedostostakin. Funktio on vain silloin fscanf.
Huoh, miksi sen piti olla noin helppoa, minä kun luulin että tuo olisi edes vähän monimutkaisempi operaatio. ^-^ Ja suostui toimimaankin heti ekalla yrityksella. Mihin on maailma mennyt..?
Kiitoksia kuiteskin, tämä pelasti päiväni, vaikka aloinkin epäillä omaa älykkyyttäni.
Eikä sinun suinkaan tarvitse lukea rivejä muistiin tekstimuodossa, vaan voit lukea Antin esittämällä tavalla suoraan tiedostosta:
fscanf(tiedosto, " %c", &merkki); switch (merkki) { case 'v': fscanf(tiedosto, "%lf %lf %lf", &verteksi.x, &verteksi.y, &verteksi.z); verteksit.push_back(verteksi); break; case 'f': fscanf(tiedosto, "%i %i %i", &kolmio.a, &kolmio.b, &kolmio.c); kolmiot.push_back(kolmio); break; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.