0

csv ファイルから値を読み取り、それらを 4 つの個別の配列に格納するコードを作成しようとしています。各行には 4 つの値があります。最初の値はある配列に格納され、2 番目の値は別の配列に格納され、3 番目の値は別の配列に格納され、4 番目の値は別の配列に格納されます。これは私がこれまでに書いたコードです:

while (FBWS.good())
{
    getline ( FBWS, infor,',');
    istringstream (infor) >> infoc;
    FBWSmin[i]=infoc;

    cout << FBWSmin[i-1] << " ";
    cout << FBWSmin[i] << "\n";

    getline ( FBWS, infor,',');
    istringstream (infor) >> infoc;
    FBWSplus[i]=infoc;

    getline ( FBWS, infor,',');
    istringstream (infor) >> infoc;
    FBWStax[i]=infoc;

    getline ( FBWS, infor,',');
    istringstream (infor) >> infoc;
    FBWSmax[0]=infoc;

    i=i++;

}

値は 1 回のループ後に配列に格納されますが、次のループが実行されると、以前に格納された値はゼロにリセットされます。そのコーディング構文かどうかはわかりません。

4

3 に答える 3

1

つまり、i=i++更新しませんii++値をインクリメントし、前の値を返します

1 つの式で値を 2 回更新するため、このバージョンは未定義の動作です。ただし、おそらく実際に起こっているのはi、毎回自分自身に戻り、反復ごとに同じ行を上書きしているだけです。ただし、未定義の動作は、何かが起こる可能性があることを意味します! プログラム全体が無意味になります。

++i;increment に書き込むだけiです。

(ところで、他の回答ではシーケンスポイントについて言及しています。とにかく、コードを書くときに一般的に考えるべきではないかなり技術的な概念であるため、気にしませんでした。より明確なバージョンを書くだけです。また、それらは存在しませんさらに、The Standard の新しいバージョンでは、「sequenced before」と「sequenced after」について説明しています。)

于 2013-07-26T18:24:59.987 に答える
0

変数をインクリメントする場合は、次のいずれかにする必要があります。

i++;

また

i = i + 1;

2つをまとめると、

i = i++;

未定義の動作になります -- 2 つのシーケンス ポイント間で同じ変数を 2 回更新しようとすることは指定されていません。

于 2013-07-26T18:27:12.297 に答える