Verständnisfragen zu fgets() und sscanf()
-
Hi, ich bin im Moment dabei das NeHe OpenGL Tutorial durchzuarbeiten und bin auf ein Codefragment gestoßen, das ich nicht verstehe.
Ich poste trotz dem OpenGL-Zusammenhang hier, da die Fragen sich nicht um die API drehen.void readstr(FILE *f,char *string) { do { fgets(string, 255, f); } while ((string[0] == '/') || (string[0] == '\n')); return; } void SetupWorld() { float x, y, z, u, v; int numtriangles; FILE *filein; char oneline[255]; filein = fopen("data/world.txt", "rt"); // File To Load World Data From readstr(filein,oneline); sscanf(oneline, "NUMPOLLIES %d\n", &numtriangles); sector1.triangle = new TRIANGLE[numtriangles]; sector1.numtriangles = numtriangles; for (int loop = 0; loop < numtriangles; loop++) { for (int vert = 0; vert < 3; vert++) { readstr(filein,oneline); sscanf(oneline, "%f %f %f %f %f", &x, &y, &z, &u, &v); sector1.triangle[loop].vertex[vert].x = x; sector1.triangle[loop].vertex[vert].y = y; sector1.triangle[loop].vertex[vert].z = z; sector1.triangle[loop].vertex[vert].u = u; sector1.triangle[loop].vertex[vert].v = v; } } fclose(filein); return; }Bei diesem Codefragment geht es darum, dass aus einer Textdatei Daten für die 3D-Welt ausgelesen werden. Meine Fragen beziehen sich nun auf:
Zeile 6: Was bewirkt diese Abbruchsbedingung?
Zeilen 27/28: Woher weiß das Programm welche Zeile aus der Textdatei gelesen werden muss? Bzw. wodurch springt die Zeile weiter? Es gibt viele Zeilen im Format "%f %f %f %f %f" um eben die Vertices zu bestimmen.
-
Zeile 6 sorgt dafür, das so lange gelesen wird, wie die Zeile mit einem \n oder / beginnt
Zeile 27/28 der liest doch bei jedem Durchgang eine neue Zeile und scant die.PS
a) orientiere dich bitte nicht so sehr an den NeHe Beispielen, die sind schrecklich!
b) verwendet man in C++ ohnehin eher std::fstream anstelle die alten C Funktionen für I/O.
-
Danke für die schnelle Antwort, hab mich jetzt nochmal damit beschäftigt und verstehe das Codefragment soweit.
zu a) Danke für den Tipp, hast du andere Vorschläge zu Lernmaterial? Ist http://www.amazon.com/OpenGL-Programming-Guide-Official-Learning/dp/0321481003/ref=pd_bbs_sr_3/103-7001143-4507817?ie=UTF8&s=books&qid=1187550091&sr=1-3 empfehlenswert?
zu b) Ja wie gesagt arbeite halt das Tutorial durch, aber werd mich in Zukunft daran halten.