ifstream: Wert aus Datei AN EINE Variable UND NICHT IN EIN MEMO-Feld vom Builder????



  • Hallo,

    ich bin Anfänger und habe nach wie vor Probleme mit dem Dateihandling. Ich möchte eine Zahl aus einer Datei an eine Variable (bzw. später Array) übergeben. Dazu möchte ich ifstream verwenden.

    Ich schaffe es mit folgendem Code, die Zahl in ein Memo-Feld vom Borland C++ Builder zu übergeben:

    float i;
    ifstream f("C:\\Pfad");
    f>>i;
    while (f)
    {
    Memo1->Lines->Add(i);
    f>>i;
    }
    if (!f.eof()) ShowMessage ("Fehler bei read");
    f.close;

    Allerdings soll der Wert, der in der Datei steht, in eine float-Variable. Das krieg ich nicht hin.

    Könnt Ihr mir bitte helfen, ich verzweifle langsam! 😞

    Danke,
    frodo



  • Du hast den Wert doch schon in einer float-Variablen: in 'i'.



  • Das ist ja genau das, was ich an dem Ganzen noch nicht verstehen. Was soll dann die erneute Abfrage in der Schleife, und die Zuweisung an Memo mit Add? In der Datei steht 84,23. Wie holt C++ den Wert denn genau rein? Angezeigt werden mir nämlich ganz viele Nachkommastellen, die es gar nicht gibt.



  • Original erstellt von <frodo>:
    Was soll dann die erneute Abfrage in der Schleife

    Keine Ahnung, den Code hast du doch geschrieben, oder? 😉

    Bei mehreren Zeilen in der Datei würden die von der Schleife nacheinander abgearbeitet und jeweils als neue Zeile an das Memo übergeben werden.

    Um soetwas nachvollziehen bzw. testen zu können solltest du dich unbedingt mit der "Kunst" des Debuggens befassen.

    Für die zusätzlichen Nachkommastellen ist die systembedingte Ungenauigkeit von Computern bei Gleitkommazahlen verantwortlich. Zu dem Thema findest du beim Suchen in den Foren hier oder per Google sicher haufenweise umfangreiche Erklärungen.

    Die Anzeige kannst du zB. mit FloatToStrF() beeinflussen, beim Rechnen mit float-Variablem brauchst du dir um die Nachkommastellen (vereinfacht gesagt) keine Gedanken zu machen.



  • Danke Dir! Den Code hab ich aus dem Buch von Richard Kaiser (C++ mit dem BC++B). Das mit den Zeilen hab ich rausgefunden, mit den Kommastellen muß ich mich jetzt befassen.

    Was heißt ich brauch mir keine Gedanken zu machen? Wenn ich plötzlich 23,3222334445 in einer Variable habe, obwohl in der Datei 23,32 stand, ist das doch ein Problem, oder?



  • Da steht mit Sicherheit nicht 23,3222334445 sondern etwas wie 23,31999999923662.

    Das ist aber ein allgemeines, kein BCB-spezifisches Problem. Also bitte an das "Rund um"-Forum wenden, oder besser noch, wie schon erwähnt, die Suchfunktion bzw. Google benutzen.


Anmelden zum Antworten