好的,所以我的主要目标是乘以两个矩阵。在跳到那里之前,我建议自己编写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");
}
}
答案 0 :(得分:1)
首先,当您致电readM
和printM
时,您应该使用M
而不是M[20][20]
来呼叫他们。
然后,出现了行和列问题。当您将参数NL
和NC
传递给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");
}
}