2d阵列添加

fud*_*din 0 c c++

这个程序增加了两个矩阵,但它给出了太多错误,我无法解决它们.

错误:

阵列边界丢失

表达式语法

有任何想法吗?

#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]);
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 13

这不是一次糟糕的第一次尝试.至少你在寻求帮助之前尝试过,这比一些人在这里做的更多.您有以下问题:

  • 您的定义格式错误.
  • 你使用非标准的东西(conio).
  • 您使用小写rowcol常量.
  • 你的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)您使用小写rowcol常量.

由于您已使用大写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[]);
Run Code Online (Sandbox Code Playgroud)

允许其他人通过实现提供,但是,如果您想要在任何地方运行的代码,您应该将自己限制为其中之一.


这摆脱了所有语法错误,现在你可以努力使界面不那么难看:-)

#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]);
}
Run Code Online (Sandbox Code Playgroud)

一些使它更好的建议:

  • 通过显示矩阵编号和坐标,使您输入的值更加明显.
  • 使其在输出数字之间打印空格.
  • 使其在输出行之间打印换行符.
  • 使它打印固定宽度的数字(排列很好).
  • 评论你的代码(我不能强调这一点).