+ 1
Counting how many entrys a Dat File with one column has?
I've got a Dreieck.dat File that I'm opening and thats showing me each entry: double Wert; ifstream Dreieck; Dreieck.open ("Dreieck.dat",ios::out) Dreieck>>Wert; if(Dreieck.is_open ()) { while (!Dreieck.eof ()) { cout<<Wert<<endl; Dreieck>>Wert } } But how can I count how many entrys are in the file? I need to get this value to calculate sth else.
12 ответов
+ 2
Die Funktion gibt double zurück und du returnst den vector.
Statt:
double DreieckDat(){...}
brauchst du:
vector<double> DreieckDat(){...}
Aber da du DreieckWerte global gemacht hast kannst auch void DreieckDat machen und in der main nur die DreieckDat aufrufen, danach kannst den vector ganz normal benutzen.
Ich kann dir das später ein bisschen umschreiben und kommentieren damits verständlicher wird. Bin aber grad noch arbeiten.
+ 3
Hab's fast vergessen :D
Das meiste ist von deinem Code kopiert. Die Änderungen hab ich kommentiert und noch ne kleine Erklärung in die main rein. Fragst halt nochmal wenn was unklar ist.
https://code.sololearn.com/cjM3vmrqyRrx/?ref=app
Und gib am besten auch Bescheid ob's funktioniert hat. Kann's hier nicht testen. Sollte aber denk ich passen.
+ 2
Best thing to solve this would be to just use a vector.
Make your DreieckDat function return a Vector<float>. This let's you access all you need.
To use a vector you need to include the header:
#include <vector>
To initiate a vector you need to specify the datatype:
vector<float> dreieckWerte
To add values to it you can use:
dreieckWerte.push_back(Wert);
And you can return it from the function just like a normal variable:
return dreieckWerte;
In your main you can then create a vector<float> and assign the return value of the function to it:
vector<float> werte = DreieckDat();
The amount of values in it can then be accessed by werte.size()
Here is a reference to the vector class: http://www.cplusplus.com/reference/vector/vector/
It's basically an easy to use dynamic array.
+ 1
Du kannst die Werte mit einer integer Variablen zählen. Nenn die einfach mal counter.
Für jeden Wert den der Code ausliest erhöhst die diese um 1.
Also zu jedem:
Dreieck >> Wert;
zusätzlich ein:
counter++;
Sollte was unklar sein frag nochmal nach.
+ 1
Dankeschön funktioniert super!
+ 1
Vielen lieben dank für die Hilfe !!
+ 1
Am besten bei solchen Fragen den Code Teil der den Fehler verursacht mit posten.
Ich vermute mal deine Funktion gibt nen vector<double> zurück und du versuchst das einem vector<float> zuzuweisen.
Da gibt's keine Standard Konvertierung, weil es u.U. falsche Werte produziert, weil Double und float verschieden präzise sind. Double hat hat 64 Bits und ist bis 15 Nachkommastellen genau, float nur 32 Bit und nur bis 7. Am besten nicht durchmischen. Wenn's nicht anders geht gibt's verschiedene Wege.
Einer wäre z.B. den ganzen Vector zu konvertieren:
https://code.sololearn.com/cKBJmAf19SG9/?ref=app
Am einfachsten wär's wenn du bei double bleibst.
+ 1
also ich hab halt
double Werte;
int counter;
int N;
vector <double>DreieckWerte;
double DreieckDat ()
{
ifstream Dreieck;
Dreieck.open ("Dreieck.dat",ios::out);
Dreieck>>Werte;
if (Dreieck.is_open ())
{
cout<<"offen"<<endl;
while (!Dreieck.eof ())
{
Dreieck>>Werte;
counter++;
DreieckWerte.push_back(Werte)
}
Dreieck.close ();
return DreieckWerte;
}
}
int main ()
{
vector <double>WerteAusgabe=DreieckDat ();
N=DreieckDat ();
}
aber DreieckWerte geht halt nicht T.T
+ 1
juhu endlich hab ichs ! Danke fürs Zeit nehmen, hat mir sehr geholfen 😊
0
how can I get the this code to display all entrys in an array? the counter is getting returned and then I tried using in the main function :
double N;
N=DreieckDat ();
float Reele [N];
I need this array for so I can calculate a spectrum T.T
0
ahh wieso sagt es:
es ist keine Konvertierung von ""std::vector <float,std:: allocator <float>> "" in ""double"" vorhanden?! T.T
0
Danke und das wäre super weil irgendwie schreib ich anscheinend trotzdem noch was falsch .