Warum tut mein programm das?

ich habe um mich ein bisschen mit dem iostream zu spielen (also rein zu übungszwecken, das programm erfüllt keinen tieferen sinn) ein programm geschrieben das folgendes tut:
es liest eine zahl x ein, schreibt in eine datei dann alle zahlen von 1 bis x (also bei 3 wären das 1,2 und 3 z.B.). dann liest es diese werte wieder ein und addiert sie.
also gleich vorweg: ich weiß dass das viel elegeanter und kürzer funktioniert, wie gesagt: ich wollte einfach nur eine übung mit in dateien schreiben und aus dateien wieder auslesen.

so, die frage gleich  vorweg: die summe ist immer genau um den wert x zu hoch. ich habe mir jetzt mal mit dem korrekturterm „summe - x“ geholfen. aber wieso tut es das?
der code:

#include \<iostream\>
#include \<fstream\>
#include \<string\>

using namespace std;

int main()
{
&nbsp;&nbsp;&nbsp; int x=0;
&nbsp;&nbsp;&nbsp; int zahler=1;
&nbsp;&nbsp;&nbsp; int y=0;
&nbsp;&nbsp;&nbsp; int summe=0;

&nbsp;&nbsp;&nbsp; cout \<\< "einen wert eingeben" \<\< endl;
&nbsp;&nbsp;&nbsp; cin \>\> x;

&nbsp;&nbsp;&nbsp; fstream dataWrite;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //einen strom erstellen
&nbsp;&nbsp;&nbsp; dataWrite.open("zahlen.txt", ios::out); //eihne datei erzeugen auf die ausgegeben wird

//Werte erzeugen und auf datei ausgeben
&nbsp;&nbsp;&nbsp; for(int i=1; i \<= x; i++)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataWrite \<\< zahler \<\< endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zahler=zahler+1;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; dataWrite.close();
&nbsp;&nbsp;&nbsp; cout \<\< " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"\<\< endl;

//Werte wieder einlesen und verarbeiten
&nbsp;&nbsp;&nbsp; dataWrite.open("zahlen.txt", ios::in);
&nbsp;&nbsp;&nbsp; while(!dataWrite.eof())
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataWrite \>\> y;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout \<\< y \<\< endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; summe = summe + y;
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; dataWrite.close();
&nbsp;&nbsp;&nbsp; cout \<\< "--------" \<\< endl;
&nbsp;&nbsp;&nbsp; cout \<\< summe-x \<\< endl;
&nbsp;&nbsp;&nbsp; //cout \<\< "die Summe aller zahlen bis - " \<\< x \<\< " - betraegt " \<\< summe-x \<\< endl;


&nbsp;&nbsp;&nbsp; return 0;
}
\<small\>

\</small\>vielen dank für nützliche antworten.

Moin,

das problem ist dataWrite

OK, danke. ich hab mir schon gedacht dass das eof das problem macht nur wusste ich nicht genau wie. der gedanke kam mir allerdings erst nachdem ich den beitrag abgeschickt habe.
danke jedenfalls für die rasche antwort. y auf 0 setzten hab ich jetzt mal gemacht, funktioniert natürlich. jetzt werde ich noch den anderen ansatz versuchen.
danke auf jeden fall für die schnelle antwort.

also das mit

dataWrite 

funktioniert leider nicht. da liest er trotzdem weiter.