这个程序增加了两个矩阵,但它给出了太多错误,我无法解决它们。
错误:
ARRAY BOUNDS MISSING
和
EXPRESSION SYNTAX
有什么想法吗?
#include<stdio.h>
#include<conio.h>
#define ROW=3
#define COL=3
int result[][COL];
void input(int arr[][COL]);
void add(int mat1[][COL],mat2[][COL]);
void print(int result[][COL]);
void main(void)
{
int mat1[ROW][COL],mat2[ROW][COL];
input(mat1);
input(mat2);
add(mat1,mat2);
print(result);
getch();
}
void input(int arr[][COL]);
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
printf("Enter element");
scanf("%d",&arr[i][j]);
}
}
void add(int mat1[][COL],int mat2[][COL])
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
result[i][j]=mat1[i][j]+mat2[i][j];
}
}
void print(int result[][COL])
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
printf("%d",result[i][j]);
}
答案 0 :(得分:13)
这不是一次糟糕的第一次尝试。至少你在寻求帮助之前尝试过,这比一些人在这里做的更多。您有以下问题:
conio
)。row
和col
作为常量。input
函数有一个无关的分号。result
。int
。更详细:
(1)您的定义格式错误。
您不要在定义中使用=
,因为它们应该是相对简单的文本替换。所以行#define ROW=3
并不是你想要的,因为那基本上是试图将符号ROW=3
定义为空值。
要获得带有ROW
值的符号3
,您需要使用#define ROW 3
。
当然,在更现代的代码中,您将使用static const int ROW = 3;
,因为这将为您提供一流的编译器符号,而不仅仅是文本替换。现在确实没有必要对常量(使用const
)或函数(使用inline
)使用预处理器定义。
(2)您使用的是非标准内容(conio
)。
ISO C(标准)不包含conio.h
头文件。我知道您正在使用它,以便您可以使用getch
函数,但ISO C提供了一个非常合适的getchar
函数,它在此处起到了相同的作用。
好的使用该语言的扩展,只要注意它们通常会使您的代码不那么便携。
(3)对常量使用小写row
和col
。
由于您对行和列常量使用了大写ROW
和COL
,因此应在for
语句中使用大写。 C是区分大小写的语言,使用row
和col
将导致编译器抱怨它们不存在。
(4)您的input
函数有一个无关的分号。
这只是该函数第一行中错误放置的;
,位于包含函数devclaration的行的末尾。
(5)您没有正确定义result
。
result
变量应该有一个确定的大小。定义int result[][10];
是所谓的不完整类型,因为无法知道大小。
(6)主要功能应始终返回int
。
C中的主要功能有两种标准形式:
int main(void);
int main (int c, char *v[]);
其他人可以通过实现提供,但是,如果你想要在任何地方运行的代码,你应该将自己限制在其中之一。
这消除了所有语法错误,现在你可以努力使界面不那么难看: - )
#include<stdio.h>
#define ROW 3
#define COL 3
int result[ROW][COL];
void input(int arr[][COL]);
void add(int mat1[][COL],int mat2[][COL]);
void print(int result[][COL]);
int main(void)
{
int mat1[ROW][COL],mat2[ROW][COL];
input(mat1);
input(mat2);
add(mat1,mat2);
print(result);
getchar();
return 0;
}
void input(int arr[][COL])
{
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
{
printf("Enter element");
scanf("%d",&arr[i][j]);
}
}
void add(int mat1[][COL],int mat2[][COL])
{
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
result[i][j]=mat1[i][j]+mat2[i][j];
}
void print(int result[][COL])
{
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
printf("%d",result[i][j]);
}
使其更好的一些建议:
答案 1 :(得分:3)
#define ROW=3
#define COL=3
对于C预处理器不正确。尝试:
#define ROW 3
#define COL 3
有关如何使用预处理器的更多信息,请参阅this page。
答案 2 :(得分:1)
现在首先出现了代码格式化的东西:
#define ROW=3
#define COL=3
应该是
#define ROW 3
#define COL 3