Kommastellen gehen beim einlesen verloren, warum?



  • Hallo Leute,

    folgendes Problem:
    Ich habe folgendes in XCode(in C++) programmiert, mit dem Ziel Messwerte aus einer .txt oder .dat Datei einzulesen. Dies ist der wichtige Teil des Codes:

    int main ()
    {
    	ifstream Datei;
    	double a[3];
    	Datei.open("array.txt");
    	for(int i=0;i<3;i++)
    		Datei>>a[i];
    	for(int i=0;i<3;i++)
    		cout<<a[i]<<endl;
    	Datei.close ();
    }
    

    Die ersten drei Daten lauten 1.888, 1.889, 1.890 und sind untereinander angeordnet. Wenn ich mir das Array ausgeben lasse, erhalte ich im besten Falle nur 1, 1, 1. Wie kann ich also Messwerte inklusive Kommastellen einlesen?

    Vielen Dank schonmal,
    McFly

    /edit pumuckl: cpp-Tags, demnächst bitte selbst machen!



  • Sieht gut aus. Ist XCode kaputt? Wei sieht das denn aus, wenn Du drei doubles in eine Datei schreibst?



  • Lern mal den Umgang mit C++ Iostreams.



  • 314159265358979 schrieb:

    Lern mal den Umgang mit C++ Iostreams.

    Sehr hilfreich. Was führt denn zum Fehler?



  • Vermutlich ist die Systemlocale auf Deutsch eingestellt, dort ist das Komma der Dezimaltrenner. Dann würde folgendes vor dem Einlesen Abhilfe schaffen, um für Datei die Standard C Locale (entspricht mehr oder weniger der amerikanischen) zu setzen:

    Datei.imbue(std::locale::classic());
    


  • Aber würde in dem Fall eines deutschen Locales nicht aus

    1.888, 1.889, 1.890
    
    1888, 1889, 1890
    

    werden, und nicht 1,1,1?
    Versteh' mich nicht falsch, deine Idee, dass es an falsch gesetzten Locales liegen könnte, finde ich gut.



  • Hast du deine Array.txt so:

    1.888
    1.889
    1.890
    

    oder mit Komma am Zeilenende?

    MfG f.-th.



  • .open() und .close() existieren nicht.



  • 314159265358979 schrieb:

    .open() und .close() existieren nicht.

    Kannst du dich mal mit solchen Randbemerkungen zurückhalten, wenn du nichts konstruktives zum Problem beizutragen hast?



  • 314159265358979 schrieb:

    .open() und .close() existieren nicht.

    Kannst du bitte mal aufhören hier dauernd Schwachsinn zu erzählen?

    Wenn das wieder eine originelle Anspielung auf RAII und Objektgültigkeit sein soll, dann sag es bitte so, dass der Threadersteller etwas damit anfangen kann. 🙄



  • kurz mal offtopic:

    314159265358979 schrieb:

    .open() und .close() existieren nicht.

    wie ihr euch vielleicht noch errinnern könnt, habe ich vor einigen wochen diesen hier über RAII aufgemacht, der genau auf dieses verhalten, diese offtopic aussagen von mister pi oben abzielte...

    @b2t:
    zeig uns doch mal deine datei, oder wenn sie zu gross ist, den anfang und das ende, so 10-20 zeilen maximal...

    zur not kannst du aber auch die datei zeilenweise in einen string einlesen, diesen in einen string stream schieben und dir daraus deinen double holen...
    wobei das eigentlich genau dasselbe ist, aber da kannst du etwaige punkte entfernen oder ersetzen - rein testweise vielleicht



  • Skym0sh0 schrieb:

    kurz mal offtopic:

    314159265358979 schrieb:

    .open() und .close() existieren nicht.

    wie ihr euch vielleicht noch errinnern könnt, habe ich vor einigen wochen diesen hier über RAII aufgemacht, der genau auf dieses verhalten, diese offtopic aussagen von mister pi oben abzielte...

    Und man hat sich darauf geeinigt, dass Konstruktoren und Destruktoren nicht böse sind, hab ich so in Erinnerung 🙄


Anmelden zum Antworten