Int Zahlen von a.txt zu b.text kopieren!
-
#include "header.h" #include <fstream> #include <iostream> using namespace std; int main (){ int x; int max=0; ifstream inn("kontak.txt"); while (! inn.eof()) { inn >> x; ofstream to("leer_kontak.txt"); to << x << "\n"; if ( x>max) max = x; } cout << "MAX: " << max;}Es wird immer die kopierte Zahl mit der nächsten Zahl überschrieben.
hmm woran liegt's?
-
Mach den Scope
tovon mal außerhalb des Schleifenkörpers. Momentan wird die Datei bei jedem Durchlauf geschlossen und wieder geöffnet (und dabei ersetzt).Du wirst auch feststellen, dass du dann immer noch einen Logikfehler hast: Derzeit prüfst du darauf, ob die letzte Leseaktion am Dateiende scheiterte, versuchst dann einen Wert zu lesen und speicherst ihn dann ab. Denk mal nach, was passiert, wenn du das Dateiende erreichst.
Du willst daher wohl eher
while (inn >> x) to << x;
-
hmm...
Also ich hab eine .txt Datei mit Int Zahlen jeweils mit einem Zeilenvorschub oder Space getrennt.Von diesen Zahlen will ich das Max bestimmen und alle Int Zahlen in eine leere .txt schreiben.
Auslesen und max. bestimmen klappt.
Beim reinkopieren klappt es nicht.€ So klappt es fast perfekt, nur wird die ERSTE Zahl beim kopieren übersprungen
while (!inn.eof()) { inn >> x; if ( x>max) {max = x;} ofstream to("leer_kontak.txt"); while (inn >> x) { to << x << "\n"; }}Wenn ich das ofstream außerhalb schreibe, passiert nix
-
Es ist schon klar was du machen möchtest.
Aber entweder hast du SeppJ`s Kommentar dazu nicht gelesen oder komplett ignoriert.Also nochmal durchlesen, darüber nachdenken (es wurde ja schon ein Hinweis gegeben + ein Lösungsvorschlag) und dann deine Fehler korrigieren.
-
ich hab alles gelesen und mittlerweile vieles ausprobiert, dass einzige was einigermaßen funktionierte, war die lösung die ich angegeben haben.
Hifle wird hier wirklich sehr kleingeschrieben.

-
Es wurde empfohlen, den scope von to ausserhalb der Schleife zu verlegen. Hast du aber nicht gemacht. Bei jedem Durchgang öffnest und schliesst du deine leer_kontakt.txt, und jedesmal überschreibst du den bisherigen Inhalt.
Auch deine condition wurde angesprochen und dir eine mögliche Verbesserung geschrieben - hast du ebenfalls ignoriert.
#include <fstream> #include <iostream> using namespace std; int main () { int x; int max=0; ifstream inn("kontakt.txt"); ofstream to ("leer_kontakt.txt"); while (inn >> x) { to << x << "\n"; if (x > max) max = x; } cout << "MAX: " << max; }
-
SinnMeister schrieb:
Also ich hab eine .txt Datei mit Int Zahlen jeweils mit einem Zeilenvorschub oder Space getrennt. Von diesen Zahlen will ich das Max bestimmen und alle Int Zahlen in eine leere .txt schreiben.
Ein weiterer Weg wäre z.B. auch dieser:
#include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <vector> int main() { std::ifstream in("test.txt"); std::vector<int> zahlen((std::istream_iterator<int>(in)),std::istream_iterator<int>()); const int max = *std::max_element(zahlen.begin(),zahlen.end()); std::cout << "max element = " << max; std::ofstream out("test2.txt"); std::copy(zahlen.begin(),zahlen.end(),std::ostream_iterator<int>(out," ")); }