2017-04-01 7 views
0

整数のテキストファイルを関数に参照渡しします。それらは新しい行で区切られています。私は関数の新しい配列にそれらをプッシュしたいです。私は問題のない行の数を数えることができ、その変数を使って与えられたサイズの配列を作成するので、ベクトルは必要ありません。しかし、私は何を私の配列の内容にする必要がありますそれを印刷するときにオフです。ファイルから整数を再度int値に変換する必要がありますか(テキストファイルから読み込んでいるので、文字列として読み込んでいますか?)ヘルプ?私の入力ファイルの番号が配列C++に入っていないのはなぜですか?

C++コード:あなたが最初の行をカウントするために、ファイルをスキャン

void myFunction(ifstream& infile) 
{ 
    int NumberOfLines = 0; 
    int index; 
    string line; 
    //Count the number of lines in the file 
    if(infile.is_open()) 
    { 
     while(getline(infile, line)) 
     { 
      ++NumberOfLines; 
     } 
    } 
    int arr[NumberOfLines]; 
    //Put the numbers into an array 
    while(!infile.eof()) 
    { 
     infile>>arr[NumberOfLines]; 
    } 
    //Print the array 
    for(int i=0; i<NumberOfLines; i++) 
    { 
     cout<<arr[i]<<endl; 
    } 
} 
+0

「私が作成し、その変数を使用し

再度ファイルを読むためには、あなたが使用して、先頭に位置インジケータをリセットする必要がありますそのサイズの配列 "これは実際にはC++では不正です。それはいくつかのC++コンパイラによって拡張が許されていますが、使用は推奨されません。 A)はすべてのコンパイラで動作しません。 B)これはあなたのスタックをオーバーフローさせる本当に簡単な方法です(または自動ストレージに使われるもの)3) 'sizeof'演算子から絶対的な恐怖を外します。 'vector'を使います。このようなことはまさにそれが何のためのものなのです。 – user4581301

+1

while(!infile.eof()) 'はよくあるバグです。もっと詳しく読む:http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – user4581301

+1

'infile >> arr [NumberOfLines];'境界から書き出しますコンパイラがこの配列をサポートしている場合、有効なインデックスは 'NumberOfLines-1'です。 –

答えて

1

ifstream位置インジケータは、ファイルの終わりに達しました。

infile.seekg(0, std::ios_base::beg);

詳細情報:seekgifstream

+2

注:ファイルを巻き戻す前にeofフラグをクリアする必要があるかもしれません。 – user4581301

+0

@ user4581301あなたは、 C++ 11以降では 'seekg'はあなたのためにそれを行います – mcrlc

+0

息子の息子それを知らなかったのですが、そこに** [istream.unformatted] **。クール。 – user4581301

関連する問題