Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C中的指针转置方阵。输出错误_C_Matrix - Fatal编程技术网

用C中的指针转置方阵。输出错误

用C中的指针转置方阵。输出错误,c,matrix,C,Matrix,目标是打印“矩阵”的转置 为了创建方阵,我从键盘上得到了“行”。 行与列相同,所以我只声明了“行” 我需要帮助的问题就在下面↓ /*input*/ 5 4 1 9 0 1 6 5 7 /*output I want*/ 5 9 6 4 0 5 1 1 7 /*wrong output I get*/ 0 4 -30838770 0 7 2 0 5 7 这是我的密码。每个函数中的矩阵必须通过引用调用。我也想知道我是否做对了 //code start int Generate(int r

目标是打印“矩阵”的转置

为了创建方阵,我从键盘上得到了“行”。 行与列相同,所以我只声明了“行”

我需要帮助的问题就在下面↓

/*input*/
5 4 1
9 0 1
6 5 7

/*output I want*/
5 9 6
4 0 5 
1 1 7

/*wrong output I get*/
0 4 -30838770
0 7 2
0 5 7
这是我的密码。每个函数中的矩阵必须通过引用调用。我也想知道我是否做对了

//code start 

int Generate(int row, int (*Matrix)[row])
{
    srand(time(NULL)); //make random number 

    int i, j;
    printf("Matrix = "); 
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            Matrix[i][j] = (rand() % 10); //insert random number from 0 to 10
            printf("%d ", Matrix[i][j]); //print matrix before transposing
        }
        printf("\n");
    }   
    return 0;
}

void Transpose(int row, int (*Matrix)[row])
{
    int i, j;
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            int transpose[i][j];
            transpose[i][j] = Matrix[j][i]; 
            printf("%d ", transpose[i][j]);
        }
        printf("\n");
    }
} 

int main() {

    int input; //for switch case
    int row = 0; //row has to be 2 or 3
    int Matrix[row][row]; //2d array. largest index should be Matrix [row-1][row-1]

    while(1){ 

    scanf("%d", &input);

        switch(input){
            case 1: // Generate random square matrix
                scanf("%d", &row); //insert row
                Generate(row, Matrix); 
                break;
            case 2: //transpose matrix
                Transpose(row, Matrix);
                break;
            default:
                return 0;
        }
    }
}

//code end


//代码开始
int生成(int行,int(*矩阵)[行])
{
srand(time(NULL));//生成随机数
int i,j;
printf(“矩阵=”);

对于(i=0;i您的程序正在尝试
打印转置,因此您不需要存储任何内容。使用
转置[i][j]
删除所有内容,只需打印
矩阵[j][i]
。正如注释中指出的,您正在分配(在堆栈上)每次迭代时都会出现一个新的ixj形矩阵,这毫无意义。

您的程序正在尝试打印转置,因此您不需要存储任何内容。使用
转置[i][j]
删除所有内容,只需打印
矩阵[j][i]
。正如注释中指出的,您正在分配(在堆栈上)每次迭代时都会出现一个新的ixj形矩阵,这毫无意义。

您在
transpose()的内部循环的每次迭代中都会创建一个新矩阵
,这可能不是您想要做的。只需改进程序的用户交互。我不会得到任何像您这样的错误输出。您在
转置()的内部循环的每次迭代中创建一个新矩阵
,这可能不是你想要做的。只要改进你程序的用户交互。我不会得到任何像你一样的错误输出。运行它,你会得到一个分段错误,当
行>3
@Lucas为什么行大于3?为什么不大于3?这不是OP要求的。根据他,应该是2或更多3,没关系。但是如果
row>3
。@Lucas循环变量转到
row
。你到底在说什么?让我们来看看。运行它,你会得到一个分段错误,当
row>3
。@Lucas为什么行大于3?为什么不大于3?这不是OP所问的问题。根据他,应该是2或3,这就是没关系。但是如果
行>3
?@Lucas循环变量转到
。你到底在说什么?我们来看看。