+ 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 Answers
+ 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 .