-2

配列 (eightBit[]) に格納されているユーザー入力を取得し、それを 2D 配列 (ボード) に追加しようとしています。ユーザーは 8 つの数値を入力する必要があります。たとえば、バイト 1: 1、バイト 2: 2 など... で、出力は次のようになります。

1 2 3 4
5 6 7 8

ただし、これは私が得る出力です:

8 8 8 8
8 8 8 8

最後に入力された番号のみを繰り返す理由は何ですか? 私のコードの一部を以下に示します。

cout << "Enter a pattern of eight bits:" << endl;
            for(i = 0; i < 8; i++){
                cout << "Byte " << i+1 << ": ";
                cin >> eightBit[i];
            }

int board[2][4];

            for(i = 0; i<8; i++){
                for(int j=0; j<2; j++){
                for(int k=0; k<4; k++) {
                    board[j][k] = eightBit[i];

                }
            }

            for(int j=0; j<2; j++)
            {
                for(int k=0; k<4; k++) 
                {
                    cout << board[j][k]  << "  ";
                }
    cout << endl;
}
4

2 に答える 2

2

iこれは、基本的に 2D 配列のすべての要素を上書きする外側のループが原因です。

解決策は、次のように、その外側のループを完全に削除することです。

int i = 0;
    for(int j=0; j<2; j++) {
        for(int k=0; k<4; k++) {
            board[j][k] = eightBit[i++];
        }
    }

また、コード スニペットにブラケットの不一致があります。

于 2013-03-24T22:17:34.420 に答える
0

それは当然です。i が最後に 8 になる 2 番目の時点で、ボードは現在の i (i=8) で満たされます。これを試して、次回はコードにもっと注意してください:)。

#include <iostream>

using namespace std;
int eightBit[2][4];

int main()
{
    cout << "Enter a pattern of eight bits:" << endl;

        for(int i = 0; i <2; i++){
            for (int j=0 ; j<4 ; ++j)  {
                cout << "Byte " << (j+1)+4*i << ": ";    //4 = # of columns,i=row,j=column.
                cin >> eightBit[i][j];
            }
        }


    int board[2][4];


    for(int i = 0; i <2; i++){
        for (int j=0 ; j<4 ; ++j)  {
            board[i][j] = eightBit[i][j];

        }
    }
    for(int i = 0; i <2; i++){
        for (int j=0 ; j<4 ; ++j)  {

            cout << board[i][j]  << "  ";
        }
        cout << endl;
   }

}
于 2013-03-24T22:13:31.793 に答える