2016-11-25 4 views
0

私はいくつかの数字を含むファイルをすべて1行に持っています。私はこのファイルを読んで、この行を文字列変数に入れたいと思います。 1行しか含まれていないので、getline()メソッドは1回だけ有効です。C++のstd :: stringは空ですが、 ' 0'でいっぱいです

しかし、そうではありません。それは2回働く。私は最初に私のstring_descriptorが数字を含んでいることに気が付きましたが(それはokeyですが)、getlineの後に別の行を入れ、今回は空ですが、デバッガを見ると文字列に\ O \のようなものが10回もたくさん含まれています。

enter image description here

\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\ 
そして、私はいくつかの処理をやった後ので、それは私を気にしているため私のアプリのcrashsているの。

それでは、私がやっていることは、次のとおりです。

fs.open (desc.c_str(), std::ios::in); 
string line; 
if(!fs.is_open()) 
{ 
     cout<<"\n Cannot open the text.txt file"; 
} 
else 
{ 
    std::string string_descriptor; 
    while (!fs.eof()) 
    { 

    getline(fs , line); 
    if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty()) 
    { 

     string_descriptor = line; 
     std::cout << "String descriptor : " << string_descriptor << std::endl; 

    } 
    } 
} 

だから、それがなぜ起こりましたか?特に私はそれをどのように扱うことができますか?私は、次の操作を行って、それを処理するために試みたが、それはまだ同じです:

if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty()) 

は私が私のファイルをチェックし、ファイルの末尾にスペースがない、これまでのところ、私は知っています。

+2

より簡素見ることができますが、ループ '' EOF()を使用しないでください。https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-間違っている – Galik

+0

ファイルにヌル文字が含まれていますか? – stark

+0

これまでの数字はありませんでした。私は – lilouch

答えて

1

が変更ループ

while (!fs.eof()) 
    { 

    getline(fs , line); 
    //... 

また、次のよう

while (getline(fs , line)) 
    { 
    //... 

この条件をループの2回目の繰り返しを避けるためにあなたの助けをありがとう

if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty()) 

if (line.find_first_not_of(' ') != std::string::npos) 
+0

改変をありがとうございますが、このように変更しても同じ問題が発生します... – lilouch

+0

@lilouchファイルに2つのレコードが含まれていて、最後のファイルが空である可能性があります。何が問題ですか? –

+0

実際には、私のファイルには数字だけの行が1つしか含まれていません。私の行変数は数字のみを含んでいなければなりませんが、再びループするようです。私はそれを望んでいないので、私はIF条件を使用しています...しかし、私はまだ\ 0の完全な空の文字列を取得します。 – lilouch

関連する問題