2016-10-07 14 views
-2

入力ファイルから配列のリストを読み込み、何か処理して結果を出力しようとしています。私は誤って配列を読んでいることに気付いたが、私が間違っていたことを理解できなかった。この問題は、以前の配列の乱数が後続の配列の末尾に追加されるように見えます。入力ファイルから配列のリストを読み取る

コードをテストするために、コードを読み取った元の配列を出力するためにいくつかの行を追加し、配列がもはや同じではないことを明確に示しています。私は元の配列の例と私の出力を最後に含めました。

ご協力いただければ幸いです!

この入力ファイルから配列を読み込み、自分のコードでの一部です:

int a[50]={0}; 
ifstream inputFile; 
string s; 
stringstream ss; 
string outputfile = "out.txt"; 
... 
int n; 
char c; 
inputFile.open("in.txt"); 
while(getline(inputFile, line)){ 
    int stringSize = line.length(); 
    line = line.substr(1, stringSize - 2); 

    istringstream input(line); 
    string number; 
    vector<int> ints; 
    while(getline(input, number, ',')){ 
     istringstream iss(number); 
     int i; 
     iss >> i; 
     ints.push_back(i); 
    } 
    copy(ints.begin(), ints.end(), array); 
    int size = sizeof(array)/sizeof(array[0]); 
    a1(array, size, outputfile); 
} 
inputFile.close(); 

a1が()私は私が読ん配列で物事を行う機能ですが、私は含まところもありますテスト用のプリント機能。

これは、プリント一部です:

ofstream output; 
output.open(filename.c_str(), ios::out | ios::app); 
output << "Original array: "; 
for (int x = 0; x < size; x++) { 
    output << a[x]; 
    if (x != size-1) output << ", "; 
} 

これはin.txtは、次のようになります。

[1, 2, 4, -1, 4, -10, 4, -19, 18, -1, -3, -4, 11, 3, -20, 19, -33, 50, 66, -22, -4, -55, 91, 100, -102, 9, 10, 19, -10, 10, 11, 11, -10, -18, 50, 90] 
[12, 12, 14, -88, -1, 45, 6, 8, -33, 2, 8, -9, -33, -8, -23, -77, -89, 1, 9, 10, 92, 87] 
[565, 78, 33, 9, 10, 84, 71, -4, -22, -55, -10, 76, -9, -9, -11, 76, 89, 11, 10, -33, 9] 
[2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] 
[2] 
[-1, -1, -1, -1, -1, -100, -10, -10, 100, 100, 100, 100, -100, 100, 10, -10, -1] 
[12, 23, 44, -17, 12, 14, -88, -1, 45, 6, 8, -33, 2, 8, -9, -33, -8, -23, -77, -89, 1, 9, 13, -25, 10, 92, 57, 99, -22] 

これは私のout.txtを今のように見えるものです:

1, 2, 4, -1, 4, -10, 4, -19, 18, -1, -3, -4, 11, 3, -20, 19, -33, 50, 66, -22, -4, -55, 91, 100, -102, 9, 10, 19, -10, 10, 11, 11, -10, -18, 50, 90, 0 
12, 12, 14, -88, -1, 45, 6, 8, -33, 2, 8, -9, -33, -8, -23, -77, -89, 1, 9, 10, 92, 87, 91 
565, 78, 33, 9, 10, 84, 71, -4, -22, -55, -10, 76, -9, -9, -11, 76, 89, 11, 10, -33, 9, 87 
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 11 
2, 3 
-1, -1, -1, -1, -1, -100, -10, -10, 100, 100, 100, 100, -100, 100, 10, -10, -1, 3 
12, 23, 44, -17, 12, 14, -88, -1, 45, 6, 8, -33, 2, 8, -9, -33, -8, -23, -77, -89, 1, 9, 13, -25, 10, 92, 57, 99, -22 
+2

あなたはこれを読むことができます:[なぜwhile(!stream.eof())が悪いと見なされるのか](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-違う)。文字列ストリームの失敗をテストする必要があります...また、あなたはストリームバッファに深入りすることなく何をしようとしているのかを達成することができると信じています – WhiZTiM

+1

問題が 'a1()'にあると思われます。あまりにも多くの要素を印刷しています。 'for()'ループを持っていれば 'i <= n'ではなく' i Barmar

+1

ファイルの先頭から 'a [50] = {0};'を削除して 'while'ループの中に移動して、行を読み込むたびに配列が初期化されるようにする必要があると思います。また、while(getline(inputFile、s))を使ってwhile(!inputFile.eof())を置き換えてください。 –

答えて

0

私はa[100]={0}をループの内側に移動しました。コメントの1つが示唆していたように、それは問題を解決しました。

私は今、配列を正しく使用することができますが、私の出力は常に配列の最後に0を追加します。これはマイナーな問題であり、コードにもう影響しません。

関連する問題