2016-07-15 4 views
0

ファイルポインタに問題があります。何らかの理由で私はそれを横断させて、すべての単語をdocument.txtに出力する方法を見つけることができません。それがないすべてが出力にも、非常に最初の1をスキップし、同じ単語別名同じ変数の内容である。(したがって、それは何度も何度も出力2番目の単語を希望し、トラバース後に停止します)ファイルのトラバースを拒否する...同じ変数の内容を出力し続ける

#include <iterator> 
#include <algorithm> 
#include <vector> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main()  

{   
    vector<string> myVector; 
    vector<string>::iterator it; 

    ifstream docFile("document.txt"); 

    string inputline; 

    getline(docFile, inputline); 

    string word; 


    while(!docFile.eof()) 
    { 
      int i = 1; 
      docFile >> word; 
      myVector.push_back(word); 
      cout<<myVector[i]<<endl; 
      // char c = getc(docFile); 
      // if(c == '\n') 
      // ++linecount; 
      // cout<<linecount<<endl; 

      ++i; 
    } 
} 

コメントコード各行を横断するたびに行数を増やそうとしているだけです。当初

+0

1ループの外で宣言し、0に初期化する必要がi、バグを修正し、しないように

。タイプミスとしてクローズする投票。 – dasblinkenlight

+0

最初の単語は、それを消費する 'getline'呼び出しのために失われます。 – dasblinkenlight

+0

ファンタジーコードではなく、実際のコードをランダムな部分を削除して投稿してください。これは、無関係なコードを大量に投稿する必要はないことに注意してください。あなたの質問を編集し、完全に作成されたコードを[mcve]に置き換えてください。 –

答えて

0
int i = 1; 
docFile >> word; 
myVector.push_back(word); 

myVectorは空で、push_back()は、ベクターへの最初の単語を追加します。ご存知のように、配列インデックスは0から始まるので、最初の単語はmyVector[0]になります。 i以来

cout<<myVector[i]<<endl; 

は一つであり、これはmyVector[1]の代わりmyVector[0]を印刷しようとします。実際には、myVector[1]が存在しないため、これは未定義の動作であり、クラッシュする可能性があります。あなたはクラッシュはないと主張し、実行は続けます。それでも "未定義の動作"の範囲内にあるので、ここで続けてみましょう。

ループの次の繰り返しで、同じ4行のコードが実行されます。 2番目の単語はにpush_back()を入力します。 iは再び1に初期化され、myVector[1]が印刷されます。

ループの次の繰り返しで、同じ4行のコードが実行されます。 3番目の単語はmyVector[2]push_back()を入力します。 iは再び1に初期化され、myVector[2]の代わりにmyVector[1]が印刷されます。

ループの次の繰り返しで、同じ4行のコードが実行されます。 4番目の単語はとなり、myVector[3]になります。 iは再び1に初期化され、myVector[3]の代わりにmyVector[1]が印刷されます。

など、など。ループの各反復では、次の単語がベクトルに追加されますが、iは毎回1に初期化され、myVector[1]が表示されるためです。

i++ループの最後には一切ありません。ループ内でiが宣言されるため、ループが最後まで実行されると、iが破棄され、ループの次の反復でiが再び1に初期化されます。変更 ``私は++ `と`私は `同じではありません+ +ので​​、私は、小文字に` ++

+0

@ Sam Varshavchikあなたの説明に感謝します。それは非常に役に立ちました。あなたを祝福しなさい!私はまだこのサイトの新しいものですが、私は次回より良い投稿をすることを約束します。ハハ。私は、いつでもすぐに、「ミニマル」、「完全」、「検証可能」の例を忘れることはありません。 – Stephan

関連する問題