2014-12-29 80 views
0

這應該是30秒鐘計入一個txt文件。但它幾乎沒有使txt本身。我究竟做錯了什麼?或者是在循環中C++只是無法進行文件處理。 現在只是在文本文件中C++在一個循環內寫入一個文件

for (i = 30; i >= 0; i--) 
    { 
     ofstream file; 
     file.open("asd.txt"); 
     file << i; 
     file.close(); 
     Sleep(1000); 
    } 
+0

「但它幾乎沒有使txt本身」這是什麼意思? – 0x499602D2

+4

你是說你只是把文件裏面的文字變成'0'?那是因爲你不是在追加模式;將openmode'std :: ios_base :: app'添加到'open'。 – 0x499602D2

+0

我想讓txt覆蓋自己 –

回答

1
什麼

移動ofstream的出這樣的循環:

// ^^ There is the useless stuff 
ofstream file; 
for (i=0;i<maxs;i++) 
{ 
    system("cls"); 
    secondsLeft=maxs-i; 
    hours=secondsLeft/3600; 
    secondsLeft=secondsLeft-hours*3600; 
    minutes=secondsLeft/60; 
    secondsLeft=secondsLeft-minutes*60; 
    seconds=secondsLeft; 
    cout << hours<< " : " << minutes<< " : " << seconds << " "; 
    file.open ("countdown.txt", ios::trunc); 
    file << hours << " : " << minutes<< " : " << seconds; 
    file.close(); 
    Sleep(1000); 
} 
+0

大聲笑,它有很多工作:D –

0

首先,你與每一個循環覆蓋輸出文件「asd.txt」。您只需爲每個會話執行一次文件指針(在循環之外)就可以創建並初始化一個文件指針。關閉文件指針也是一樣。

ofstream file; //Create file pointer variable 
file.open("asd.txt"); //Initialize 'file" to open "asd.txt" for writing 
for (i = 30; i >= 0; i--) 
    { 
    file << i; //You'll need to add a new line if you want 1 number per line 
    Sleep(1000); //Assuming this is in microseconds so sleep for 1 second 
    } 
file.close(); //close the file pointer and flushing all pending IO operations to it. 
2

基本上你做什麼你創建的對象代表文件,每次你試圖打開它。 如果每次使用新引用(對象)訪問文件,它都會寫入新數據並刪除以前的數據。 試着這樣做:

int main() 
{ 
    ofstream file; 
    file.open("test.txt"); 
    for (int i = 30; i > 0; --i) 
    { 
     file << i << endl; 
     Sleep(1000); 
    } 
    file.close(); 


    system("pause"); 
    return 0; 
} 
1

你可以聲明ofstream退出循環。

如果您必須在循環內使用它,請使用附加模式。

file.open("test.txt", std::ofstream::out | std::ofstream::app);