2017-07-03 65 views
0

我有一個問題。爲什麼我的程序不會讀取最後一個整數,如果我沒有在文件末尾放一個空格?如果我有一個只有數字的文本文件,沒有結束空格,程序不會讀取任何內容。讀取最後一個整數文件C++

這是我的計劃:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main(){ 
    fstream f1,f2; 
    int k; 
    int q; 

    cout << "Inserisci numero lettere da leggere : "; 
    cin >> q; 

    f1.open("in.txt", ios::in); 
    f2.open("out.txt", ios::out); 

    if(f1.fail()){ 
     cout << "Impossibile aprire il file"; 
     exit(1); 
    } 

    f1 >> k; 

    while(!f1.eof() && q > 0){ 
     q--; 
     cout << k << '\n'; 
     f2 << k; 
     f1 >> k; 
    } 

    f1.close(); 
    f2.close(); 

    return 0; 
} 
+0

您可以用英文編寫代碼。 – 21koizyd

+0

閱讀[爲​​什麼iostream :: eof內循環條件被認爲是錯誤的?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – molbdnilo

+0

雖然'!f1.eof()'會導致寫入最後一個值兩次,實際上我無法解釋也沒有重現爲什麼你的程序不能讀取任何*號碼。你爲'q'輸入一個大於0的值嗎? –

回答

2

你的程序讀取所有的數字,但你有一個讀操作之後!f1.eof()檢查。當最後一個數字後面有一個文件結束時,你永遠不會輸出它。

更換

f1 >> k; 

while(!f1.eof() && q > 0){ 
    q--; 
    cout << k << '\n'; 
    f2 << k; 
    f1 >> k; 
} 

while(f1 >> k && q > 0){ 
    q--; 
    cout << k << '\n'; 
    f2 << k; 
} 

閱讀一些關於input/output via streams一些文章。