程序不会打印矩阵

时间:2015-10-08 09:40:14

标签: c pointers matrix

我一直在努力为类创建一个矩阵计算器,用户输入矩阵的细节(行数,列数等),然后打印输入。最终结果应该是这样的:

Ex:2x2矩阵

1 2

3 4

我看了一些像这样的类似问题:Print a square matrix using pointers但我认为这不是我想要的。这是代码:

int **theAMatrix;

switch(choice) {
    case 1:
        theAMatrix = (int **)malloc(sizeof(int*)*rowsizeA);
        for(i = 0; i < rowsizeA; i++) {
            for(j = 0; j < colsizeA; j++) {
            theAMatrix[i] = (int*)malloc(sizeof(int)*colsizeA);
            }
        }
        for(i = 0; i < rowsizeA; i++){
            for(j = 0; j < colsizeA; j++){
                printf("Enter Row: %d Col: %d ", i, j);
                scanf("%d", &theAMatrix[i][j]);
            }
        }
        printf("Matrix A Complete\n\n");
        Menu();
    case 2:
        printf("Matrix A\n");
        for(i = 0; i < rowsizeA; i++) {
            for(j = 0; j < colsizeA; j++){
                printf("%d", *(*theAMatrix + i) + j);
            }
            printf("\n");
        }
        Menu();

事实是,当你告诉它时,程序不会打印矩阵。它也不会崩溃,只是没有大惊小怪。我是否以某种方式弄乱了语法?

注意:有一个头文件,其中包含Menu(),makeChoice()和getMatrixAValues()函数。我已经检查过了,前面的一切看起来都不错但是如果有人认为那里出了问题我也会在这里发布。

[edit] @Joachim这是Menu()的代码,只显示用户的内容:

int Menu() {
    printf("**MATRIX MULTIPLICATION CALCULATOR**\n");
    printf("[1] Enter Matrix A\n");
    printf("[2] Enter Matrix B\n");
    printf("[3] Print Matrix A\n");
    printf("[4] Print Matrix B\n");
    printf("[5] Print Transpose of Matrix A\n");
    printf("[6] Print Transpose of Matrix B\n");
    printf("[7] (bonus) Change size of Matrix A\n");
    printf("[8] (bonus) Change size of Matrix B\n");
    printf("[9] Print A x B\n");
    printf("[0] Exit\n");
    makeChoice();
}

1 个答案:

答案 0 :(得分:1)

不知道这是否是真正的问题,但从逻辑上讲,您需要在break;之后添加case语句。

case 1:
    theAMatrix = (int **)malloc(sizeof(int*)*rowsizeA);
    for(i = 0; i < rowsizeA; i++) {
        for(j = 0; j < colsizeA; j++) {
        theAMatrix[i] = (int*)malloc(sizeof(int)*colsizeA);
        }
    }
    for(i = 0; i < rowsizeA; i++){
        for(j = 0; j < colsizeA; j++){
            printf("Enter Row: %d Col: %d ", i, j);
            scanf("%d", &theAMatrix[i][j]);
        }
    }
    printf("Matrix A Complete\n\n");
    Menu();

    // You need a break; statement here!!!
case 2:
    printf("Matrix A\n");
    for(i = 0; i < rowsizeA; i++) {
        for(j = 0; j < colsizeA; j++){
            printf("%d", *(*theAMatrix + i) + j);
        }
        printf("\n");
    }
    Menu();

    // And here as well

如果故意这样做,那么我认为我看到它的方式,你在menu()中调用main()并且你编写的switch-case是makeChoice()函数的一部分。 如果是这样,那么您可以共享变量choice正在更新的片段。可能是一个愚蠢的scanf问题。

顺便说一下,你是否还想在开关盒中加上default:?您可以使用它来打印调试消息,只是为了知道您的choice是否正确设置。

此外,您的printf("%d", *(*theAMatrix + i) + j);应为printf("%d", *(*(theAMatrix + i) + j);