我正在嘗試用 C 創建一個程式,將數字從一個二維陣列復制到另一個陣列,但具體來說。(見圖)
代碼:
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i ){
for(int j = 0; j < 2*8; j ){
output[j][i] = numbers[i][j];
}
}
for(int j = 0; j < 2*8; j ){
for(int i = 0; i < 3; i ){
printf("%d ", output[j][i]);
}
printf("\n");
}
}
我的輸出:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
但它很糟糕。
輸出應如下所示:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
問題是,在第二部分的輸出中,我有來自第 1、2 和 3 行的數字(來自數字陣列)。但它應該是第 3、4 和 5 行。
uj5u.com熱心網友回復:
您必須正確設定索引:-)
for (int i = 0; i < 3; i ) {
for (int j = 0; j < 16; j ) {
output[j][i] = numbers[j / 8 * 3 i][j % 8];
}
}
uj5u.com熱心網友回復:
在你的代碼的基礎上,我分為兩種情況,第二部分我把 2 像這樣: output[j][i] = numbers[i 2][j];
#include <iostream>
using namespace std;
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i ){
for(int j = 0; j < 8; j ){
output[j][i] = numbers[i][j];
}
}
for(int i = 0; i < 3; i ){
for(int j = 8; j < 16; j ){
output[j][i] = numbers[i 2][j];
}
}
for(int j = 0; j < 2*8; j ){
for(int i = 0; i < 3; i ){
printf("%d ", output[j][i]);
}
printf("\n");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363026.html
上一篇:getline中的段錯誤
下一篇:C中的結構填充
