2017-09-12 19 views
1

私はcinを使用してテキストファイルを読む際に問題が発生しています。ここに私のコードの基本的な考え方は次のとおりです。C++テキストファイルリダイレクトgetline無限ループ

while(getline(cin,line) { 
cout << line << endl; 
} 
//Do some task 
return 0; 

私はに実行している問題は、ループが終了し、//いくつかのタスクが実行されることはありませんしないだろうということです。私が見つけた唯一の解決策は、テキストファイルを直接見て、いくつの行のテキストがあるかを確認し、ハードコードから抜け出すための条件付きコードです。だから私は5行と可変int行のテキストファイルを持っていると言う。それで、私は次のようなことをするでしょう:

while(getline(cin,line) { 
cout << line << endl; 
if(row == 5) { 
break; 
} 
//Do some task 
return 0; 

私はグーグルを試みましたが、私はどこでも答えを見つけることができません。何か案は?また、私が使用できるライブラリはiostreamだけです。

+0

私はfstreamを使用していません。私はEclipseを使用しています。私は実行コンフィギュレーションに入り、外部テキストファイルを使用するためにcinをリダイレクトしました。 –

+0

私はちょうどあなたのプログラムの最初のバージョンを実行し、私のために完全に動作します。あなたのファイルには何が入っていますか? – atru

+0

は0に初期化されていますか?どこを増やしていますか? ifstreamオブジェクトを使用してください –

答えて

0
#include <iostream> 
#include <string> 
#include <fstream> 

int main() 
{ 
    std::string line; 
    std::fstream fin; 
    fin.open("test.txt"); 
    while (getline (fin, line)) 
     std::cout << line << std::endl; 
    fin.close(); 

    //Do smth here 

    return 0; 
} 
0

次のコードブロックは、あなたの問題を解決する必要があります。 クレジットは作者に行く:kevinchkin http://www.cplusplus.com/forum/beginner/8388/

#include<iostream> 
#include<fstream> 

using namespace std; 

int main() { 

ifstream myReadFile; 
myReadFile.open("text.txt"); 
char output[100]; 
if (myReadFile.is_open()) { 
while (!myReadFile.eof()) { 


    myReadFile >> output; 
    cout<<output; 


    } 
} 
myReadFile.close(); 
return 0; 
} 

これは、.txtファイルから読み込むための基本的なテンプレートです。私はまた、iostream以上のものを使用できないようにすべき理由を考えることもできません。 iostreamはこれを実行する最善の方法ではないため、他のライブラリを作成します。 教師/教授のほとんど(すべてではないにしても)生徒が授業を勉強している以上に上がったときに好きだったし、もっと学びたい。 追加のヘルプが必要な場合は、次をご覧ください。http://www.cplusplus.com/doc/tutorial/files/

+1

このスレッドを参照してください:[iostream :: eofがループ状態になっているのはなぜ間違っているのですか?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-間違って) –

+0

私はテンプレートを言って、私はコードを得たところへのリンクをしました、うまくいけばRandomGuyもそこに見えます。私がこのスレッドで見たのは、EOFの使い方を慎重にしなければならないということではありません。コードブロックの私の理解は、もし私たちがEOFにいなければ別の行があるので、それを手に入れてください。もし私たちがEOFにいるなら、存在しないものをつかわないでください。 –

+0

'EOF'は単にフラグであり、' .eof() '関数は単にフラグの値を返します。 eof() 'を呼び出すと、ファイルの最後にいるかどうかを常に知ることはできません。あなたが知ることは、私が最後に実行した文が 'EOF'フラグをtrueにしたかどうかです。そして、 'EOF'フラグはファイルから何かを読み込もうとすると' true'の値しか得られません。ファイルの終わりを見つけますが、ループ本体のファイルから読み込んでいるので、ループ条件で 'eof()'を実行すると、ループが余分に実行されます。 –