Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

10.09.2005, 09:50

[Kapitel 2.2, Aufgabe 2] Problem beim Vektoreneinlesen

Hi!

Ich versuche mich gerade an Aufgabe 2 im Kapitel 2.2. Das einlesen der Vektoren bereitet mir jedoch Kopfzerbrechen. Hier erstmal der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
tbVector3 *pCInVector = new tbVector3, *pCBufferInVector;
int iVectorCounter = 0;
do
{
    CInFile.getline(cBuffer, 8, ' ');
    pCInVector[iVectorCounter].x = atof(cBuffer);
    CInFile.getline(cBuffer, 8, ' ');
    pCInVector[iVectorCounter].y = atof(cBuffer);
    CInFile.getline(cBuffer, 8, '\n');
    pCInVector[iVectorCounter].z = atof(cBuffer);
    ++iVectorCounter;
    pCBufferInVector = new tbVector3[iVectorCounter + 1];
    memcpy(pCBufferInVector, pCInVector, sizeof(pCInVector));
    delete[]pCInVector;
    pCInVector = new tbVector3[iVectorCounter + 1];
    memcpy(pCInVector, pCBufferInVector, sizeof(pCBufferInVector));
    tbWriteVector3ToLog(pCInVector[iVectorCounter - 1]);
    delete[]pCBufferInVector;
}while(!CInFile.eof());


Das Einlesen selbst funktioniert, der Kopiervorgang scheint das Problem zu sein. Lediglich die x-Koordinate des ersten Vektors wird zugewiesen, der Rest ist uninitialisiert. Die Vektoren liegen in folgender Form vor

Quellcode

1
2
3
1 2 3
4 5 6
7 8 9

wobei jede Zeile einen Vektor beschreibt.

Schonmal Danke,
zoltan14m

2

10.09.2005, 12:09

??? In Kapitel 2.2 Aufgabe 2 muss man doch Vektoren und eine Matrix aus einer Datei laden und die Vektoren dann jeweils mit der Matrix Transformieren und die Vectoren dann wieder Speichern. Zu der Aufgabe hab Ich etwas weiter unten schon was geschrieben.

In Kapitel 1.4 Aufgabe 2 muss man was Kopieren.

Anonymous

unregistriert

3

10.09.2005, 12:37

Deinen Topic hab ich schon gelesen, allerdings habe ich die Aufgabe ein wenig anders interpretiert. Bei mir liegen die Vektoren schon vorher in der Datei vor(und werden nicht zuerst hineingeschrieben). Es heißt ja das die Anzahl der zu einlesenden Vektoren beliebig sein soll, deshalb soll mein Programm mit einer variablen Vektoranzahl umgehen können.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

10.09.2005, 13:49

Also das sieht fast schlimmer aus als mein Skriploader ;)

Erstmal ein paar prinzipelle Sachen. Arrays werden einmal allociert und nach gebrauch gelöscht. Dabei kann die größe nicht mehr verändert werden.
2. sollte man beim solchen Sachen das KISS System beachten. Ich persönlich würde das so machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
tbVector3 *pallVectores = NULL;


for(int iVCounter = 0; !CInFile.eof(); iVCounter++)// man kann auch leere Dateien erwischen / das mit dem for ist Geschmackssache

{
     char cBuffer[8];//Vars immer in dem kleinsten Gültikeitsbereich

     tbVector3 TempV;

   CInFile.getline(cBuffer, 8, ' '); 
       if(cBuffer)  TempV.x = atof(cBuffer);//ein wenig Sicherheit sonst gibt es böse fehler 

   CInFile.getline(cBuffer, 8, ' '); 
       if(cBuffer)  TempV.y = atof(cBuffer); 
   CInFile.getline(cBuffer, 8, '\n'); 
       if(cBuffer)  TempV.z = atof(cBuffer);
     
//den Teil kann man durch eine Liste ersetzten

   tbVector3* ptempVector = new(tbVector3[iVCounter + 1]);//nun den Umgehungsspeicher allocieren

   memcpy(ptempVector, pallVectores, iVCounter * sizeof(tbVector3));
   delete[] pallVectores;
   
   ptempVector[iVCounter] = TempV;//geht hier natürlich auch mit memcpy

   pallVectores = ptempVector;
}


Ist natürlich niemals eine Ideallösung und stark geschmacksabhängig, auch habe ich sie jetzt nicht getestet, aber sie sollte einigermaßen funktionieren.
Wir sind ja alle in einem stetigen Lernprozess und lernen daher nie aus :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

5

12.09.2005, 10:07

Thx, das einlesen funktioniert jetzt. Hab allerdings wohl noch einiges zu lernen... ;)

Werbeanzeige