2011-09-04 21 views
0

私はいくつかのファイルを読み書きしようとしていましたが、私は2番目のgetlineコマンドを実行できません。なぜこのようなことが起こるかについてのアイディアはありますか?getline function奇妙なエラー

AND 1 2 3 
NAND 4 5 6 
NOR 2 3 7 
XOR 1 6 8 
OR 8 7 9 

abc.txt

char str[80]; 
char substr[10]; 
file.open("abc.txt", fstream::in); 

    file.getline(str,'\n'); 
     while(!file.eof()) 
    { 
     i=0; 
     while(str[i]!='\n') {substr[i] = str[i++]; } 

     substr[i++]='\n'; 
     cout<<substr; 

     file.getline(str,'\n'); 

    } 

私はtxtファイルを作成するために、メモ帳を++を使用するので、CR/LFは、各行の終わり

+0

abc.txtの内容を印刷できますか?単一の行がある場合、ループは実行されません –

+0

['while!eof'はほとんど常に間違っています。](http://www.parashift.com/c++-faq-lite/input-output.html #faq-15.5)この場合は実際には悪用していないが、私はまだこのようにすることをお勧めしません。また、 'std :: string'の何が間違っていますか? –

+0

「実行できません」とはどういう意味ですか? _何が起こるのですか? –

答えて

-1

私のコメントでフォローアップでかなり確信があるのですwhileループ内でfile.getlineコマンドを移動してみてください。

... 
while(!file.eof()) 
{ 
    file.getline(str,80,'\n'); 
    ... 
+0

私はそれを持ってきました。 – noob

+1

@noob私は間違っているかもしれませんが、私はgetl​​ineが区切り文字の前に長さの引数を取ったと思っていました... –

+0

@noobあなたのコマンドでも、(nand行のように)10文字より長い文字列があります。 substrの長さを増やしたいと思うかもしれません –

1

第2引数fstream::getline iデリミタではなく、ストリーム化されます。区切られたバージョンでは、オーバーロードされたバージョンが必要です。 this referenceを参照してください。

-1

これは機能します。 while条件でgetline()を使用し、 '\ n'で区切られた文字列を取得し、strcpyを使用します。

char str[80] = { '\0' }; 
char substr[80] = { '\0' }; 

ifstream file; 
file.open("abc.txt", fstream::in); 


int i = 0; 
while(file.getline(str, 79, '\n')) 
{ 
    strncpy(substr, str, 78);  
    substr[strlen(substr)]='\n';  
    cout<<substr;  
} 
+0

何が問題なのですか? – Jagannath

+0

私はここにすべての答えはdownvoteを取得すると思う – LeleDumbo