2016-10-14 16 views
0

私はHEVCすなわちX265で作業しています。ここでは、fileから読み込んだ値をQP配列に入力しようとしています.QP配列の値は0 100ファイルを読み込み、それを整数配列として入力すると入力します

に私は99ファイルまでの1の組み合わせをテストファイルや入力を作成し、0のいる次のようになります。次のように

10101010110101010000000000000000000000000000000000000000000000000000000000000000000000000000000000 

私は、この目的のために書かれているコードは次のとおりです。

しかし、私は正しい値を持つことができません。 qp_inputは0のままです。私は間違っていますか?

+0

[理由であり、一方、(!myfile.eof())間違っ](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a- loop-condition-considered-wrong) – BeyelerStudios

+0

あなたの奇妙なファイルからの読み込みにもかかわらず(関連:http://stackoverflow.com/questions/18398167/how-to-copy-a-txt-file-to-a-char) -array-in-c)、あなたのコードはうまく動作します。 – SingerOfTheFall

+2

'1'のASCII値が48ではなく49であるため、値が正しくありません。絶対にマジックナンバーを使用しないでください。 –

答えて

0

配列内に入力し、その配列内の配列インデックスの代わりにポインタ ">> input"を読み込もうとしています。 ""入力[インデックス] "あなたのループ内にカウンターがあり、アレイに読み込む必要があります。

int index = 0; 
    while (!myfile.eof()) { 
     myfile >> input[index]; 
     cout<< input[index] <<endl; 
     index++; 
    } 
    myfile.close(); 

また、ファイル内のデータはどのタイプですか。 monentで文字を読み込むので、バイトであると仮定しています。結果がプレーンテキストの10進形式である場合は、入力のタイプをintまたはdoubleに変更したいと思うでしょう。

+0

あなたはチェックされていない読み込み、悪い例を実行しています - 文字列の読み込みにも何も問題はありません – BeyelerStudios

+0

@BeyelerStudiosしかし、入力配列は100であり、forループの配列をループしています。明らかに、入力配列はchar配列文字列ではなく、100エントリを格納することを意図しています。私が与えた例は、単に問題であるインデックス作成の問題を修正するだけです。 –

+0

いいえ、あなたのコードはOPのコードに何も修正しません。代わりに、入力ファイルに99文字の100番目のエントリを未定義にするなど、新しいバグが導入されています。入力をチェックしないと、100番目のエントリは 'index'によって数えられ、99個以上の入力文字があれば配列の外側に書き込まれます。どんな改善もありません。 – BeyelerStudios

2

チェックこのソリューション

#include <stdio.h> 
#include <iostream> 
#include <string.h> 
#include <sstream> 
#include <fstream> 
using namespace std; 
int main(int argc, char* argv[]) { 
    ifstream myfile; 
    myfile.open("text.txt"); 

    int qp_input[100]; 

    //will read whole contents to a string instead of while(!myfile.eof()) 
    std::string input((std::istreambuf_iterator<char>(myfile)), 
         (std::istreambuf_iterator<char>() )); 
    for(int i=0;i<input.size();i++){ 
     stringstream ss; 
     ss<<input[i]; 
     ss>>qp_input[i]; 
     cout<<i<<" : "<<qp_input[i]<<endl; 
    } 
} 
+1

'std :: for_each(std :: istream_iterator (myfile)、std :: istream_iterator ()、[](char ch){...});'を使うことで、不要な割り当てをスキップすることもできます。 'std :: transform'を使って' qp_input'配列を埋めています。 – BeyelerStudios

+0

@BeyelerStudios wow .... thatz awesome。しかし、その儀式には11個のコンパイラが必要です。 –

+1

ラムダyesを使用したい場合は、ファンクタ型( 'operator() '型)を定義し、その代わりにそのインスタンスを使用してください。 – BeyelerStudios

関連する問題