Wo ist der Fehler?



  • Hallo,
    da mein Debugger nicht funktioniert, muss ich euch jetzt nerven..^^
    Warum macht der folgende Code nicht das, was ich will:
    Ich will die Zahlen( bis 150k ) nacheinander in eine Datei speichern, ohne Leerzeichen.
    Da aber alles in eine Zeile nicht reinpasst, wollte ich dem Miststück sagen, dass er, wenn etwa(erstmal nur "etwa"..) 1000 Zeichen in der Zeile sind, ein "\n" setzt und die weiteren ~1000 Zahlen in die nächste usw.

    Aber er weigert sich -.- 😡 ...und gibt mir nichts aus, bzw. bspw. werden die ersten ~1300 weggelassen und die restlichen

    #include<iostream>
    #include<fstream>
    
    using namespace std;
    
    int main (){
    	ofstream fout("Zahlen.txt");
    	int i,j=0,k=1;
    	char ch;
    	for(i=1;i<150000;i++){
    		fout << i;
    
    		ifstream fin("Zahlen.txt");
    		while(fin >> ch){
    			j++;
    		}
    		if(j>k*1000){
    			fout << "\n";
    			k++;
    		}
    		j=0;
    	}
    	return 0;
    }
    

    In der while-schleife zählt er wieviele Ziffern bislang in der Datei sind, zumindest ist das so gedacht.



  • keine spaßige idee, gleichzeitig in die selbe datei zu schreiben und zu lesen.
    kannste das auch anders machen?



  • hmm, wie denn, weil ich ja auf die Daten in jedem Durchlauf zugreifen muss...
    wenn ich mir eine zweite Datei anlege, ist es doch dasselbe ?!

    Ansonsten ließe sich das vielleicht umgehen, wenn ich eine Art close-Datei hätte oder?
    Also nach dem jeweiligen Zugriff die Datei für den nächsten Zugriff freimache oder sowas.



  • Slabic schrieb:

    Ansonsten ließe sich das vielleicht umgehen, wenn ich eine Art close-Datei hätte oder?

    flush reicht schon. aber es ist nicht gut. machs anders.



  • vielleicht sowas

    #include<iostream>
    #onclude<cmath>
    #include<fstream>
    
    using namespace std;
    
    int main (){
    	ofstream fout("Zahlen.txt");
             int pos=0;
    	for(i=1;i<150000;i++){
    		fout << i;
                      pos+=floor(log10(i))+1;
                      if(pos>1000){
                         fout<<'\n';
                         pos-=1000;
                      }
             }
    	return 0;
    }
    


  • Ok, danke, ich werd's mal derart versuchen.


Anmelden zum Antworten