2017-07-03 8 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()'は最後の値を2回書くことにつながりますが、実際にはあなたのプログラムが*任意の*番号で読み込まれない理由を説明したり再現することはできません。 'q'に値> 0を入力しますか? –

答えて

2

あなたのプログラムは、すべての数字を読んで、あなたは、読み出し動作後の!f1.eof()チェックを持っています。そして最後の数字の後にファイルの終わりがあるとき、それは決して出力しません。

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

f1 >> k; 

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

を交換し、input/output via streamsに関するいくつかの記事をお読みください。

関連する問題