0

リストを前後に印刷するこのプログラムに問題がありますが、リストを後方に印刷すると、リストの最初の数字は正しい数字ではなくランダムな大量の数字になります。例えば

0 1 2 3 4 5 6 7 8 0
4286398 8 7 6 5 4 3 2 1 0

誰でも私のコードの何が問題なのか説明できますか?

また、printList 関数から checkList() という新しい関数にカウンターを渡す方法を教えてください。

コード:

void printList(int array1[]){
int counter = 0;
int x;
ifstream theFile("list.txt");

while(theFile >> x){
    array1[x] = x;
    cout << array1[x] << " ";
    counter = counter + 1;
}
cout << endl << counter << endl;;

int n = counter;

for(int i = n -1; i >= 0; i--){
    cout << array1[i] << " ";
}
4

5 に答える 5

6

これが犯人です:

array1[x] = x;

配列の入力値が0 1 2 3 4 5 6 7 8 0の場合、ループの最後の反復で を実行していますarray1[0] = 0。カウンターをインクリメントしながら、配列の最初の項目を上書きします。次に、逆にすると、array[9]設定したことがないため、ガベージ値が含まれます。

于 2013-04-23T17:49:57.313 に答える
4

あなたがやっている

array1[0] = 0;
array1[1] = 1;
array1[2] = 2;
array1[3] = 3;
array1[4] = 4;
array1[5] = 5;
array1[6] = 6;
array1[7] = 7;
array1[8] = 8;
array1[0] = 0; // here

array1[9] は初期化されていません

于 2013-04-23T17:51:09.040 に答える
0

あなたは間違って上向きに数えており、最終的に配列の後に初期化されていないメモリにヒットします。配列の長さをパラメーターとして関数に渡す必要があります。
配列がポインターに減衰するため、その長さを回復することはできません。

void printList(int array1[], into size){ }

そうすれば、それほど複雑な長さを計算する必要はありません。

于 2013-04-23T17:50:57.760 に答える