在C中读取和打印矩阵

时间:2016-11-30 18:49:03

标签: c matrix

好的,所以我的主要目标是乘以两个矩阵。在跳到那里之前,我建议自己编写2个函数来读取和显示矩阵。我想的基本东西。 在我运行程序并输入行数和列数后,我只能在崩溃前输入1个值。 我使用Dev c ++。 这可能是什么问题?提前谢谢。

#include <stdio.h>
#define MAXSIZE 20
void readM(int M[MAXSIZE][MAXSIZE],int,int);
void printM(int M[MAXSIZE][MAXSIZE],int,int);

int main ()

{
    int NL,NC,i,j;
    int M[20][20];
    readM(M[20][20],NL,NC);
    printM(M[20][20],NL,NC);    


    return 0;
}


void readM(int M[20][20],int NL,int NC) 
    {
        int i,j;
        printf("Type in number lines ");
        scanf("%d",&NL);
        printf("Type in number of columns ");
        scanf("%d",&NC);
        printf("Type in values \n");

        for(i=0;i<NL;i++)
            {
                for(j=0;j<NC;j++)
                {
                    scanf("%d",&M[i][j]);
                }
            }
    }

void printM(int M[20][20],int NL,int NC)
    {
        int i,j;
        printf("Matrix is \n");

        for(i=0;i<NL;i++)
            {
                for(j=0;j<NC;j++)
                {
                    printf("\t%d\t",M[i][j]);
                }
                printf("\n");
            }
    }

1 个答案:

答案 0 :(得分:1)

首先,当您致电readMprintM时,您应该使用M而不是M[20][20]来呼叫他们。

然后,出现了行和列问题。当您将参数NLNC传递给readM时,您将在main内传递其值的副本。当您阅读readM中的值时,您将存储您在本地阅读的内容,而main将永远不会知道它。

要更改它,您可以使用指针,或者可以阅读main中的行和列,只留下readM,其唯一目的是读取矩阵。

程序可能正在跳过您的输入,因为输入缓冲区中有垃圾。获取用户输入的最佳方法是创建一个自定义函数,该函数读取stdin中的所有内容,然后相应地对其进行处理。因为你永远不知道用户会输入什么......

以下是我的建议代码:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20

void readM(int M[MAXSIZE][MAXSIZE], int, int);
void printM(int M[MAXSIZE][MAXSIZE], int, int);

/* very simple function to treat user input */
int read_num(void)
{
    char buf[50];
    fgets(buf, 50, stdin);
    return atoi(buf);
}

/* if main() won't take any arguments, use void */
int main(void)
{
    int NL, NC, i, j;
    int M[20][20];

    /* extracted from readM */
    printf("Type in number lines ");
    NL = read_num();
    printf("Type in number of columns ");
    NC = read_num();

    readM(M, NL, NC);

    printM(M, NL, NC);


    return 0;
}


void readM(int M[MAXSIZE][MAXSIZE], int NL, int NC)
{
    int i, j;
    printf("Type in values \n");

    for (i = 0; i < NL; i++) {
        for (j = 0; j < NC; j++) {
            M[i][j] = read_num();
        }
    }
}

void printM(int M[MAXSIZE][MAXSIZE], int NL, int NC)
{
    int i, j;
    printf("Matrix is \n");

    for (i = 0; i < NL; i++) {
        for (j = 0; j < NC; j++) {
            printf("\t%d\t", M[i][j]);
        }
        printf("\n");
    }
}