Эта программа добавляет две матрицы, но она дает слишком много ошибок, и я не могу их решить.
Ошибки:
НЕИСПРАВНОСТЬ МАССОВЫХ БОЛОНОВ
и
СИНТАКСИС ЭКСПРЕССИИ
Любые идеи?
#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]);
}
Это не плохая первая попытка. По крайней мере, вы пробовали, прежде чем попросили о помощи, что больше, чем некоторые из них. У вас есть следующие проблемы:
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]);
}
Некоторые предложения по улучшению работы:
#define ROW=3
#define COL=3
неверен для препроцессора C. Попробуйте:
#define ROW 3
#define COL 3
Подробнее о том, как использовать препроцессор, см. эту страницу.
Первое, что появляется, когда код отформатирован:
#define ROW=3
#define COL=3
должен быть
#define ROW 3
#define COL 3
void main()
.main
ВСЕГДА, по стандарту, имеет тип возвращаемого значенияint
.