Во-первых, вам нужно поставить прототипы функций, прежде чем main()
или, по крайней мере, переместить определения функций перед тем main()
. Мне совершенно не понятно, почему вы используете VLA для sumRay[][]
, но массивы с постоянными размерами для ray1[][]
и ray2[][]
. Если у вас нет веских оснований для этого, лучше будет использовать VLA.
Вы должны использовать тип size_t
для переменных, содержащих индексы массива. Операторы scanf()
и printf()
, которые обрабатывают переменные size_t
, затем должны быть изменены для использования спецификатора преобразования %zu
.
Функция arraySum()
выполняет итерацию по двум парам повторяющихся индексов массива по причинам, которые неясны. Логика здесь сложна и чрезмерно сложна. Поддельный вывод, о котором вы сообщали, можно проследить до этой функции; его трудно читать и понимать, что должно быть признаком того, что его нужно переписать. И если ваше намерение заключается в добавлении входных массивов только частично, это имя не отражает это намерение. Я упростил эту функцию, ужесточил логику и устранил дублирование. См. Обновление ниже для версии, которая добавляет частичный массив.
printSumRay()
функция кажется излишним, так как функция printRay()
может выполнять ту же работу, так что я удалил его, переписав printRay()
использовать VLA-х и затягивание код.Исходный код использовал магическое число 3
в контрольных выражениях здесь, вместо того, чтобы использовать MAXROW
и MAXCOL
. Но даже если вы не используете VLA, лучше использовать размеры для любой функции, которая будет работать с массивом.
Вот модифицированная версия исходного кода:
#include <stdio.h>
#include <stdlib.h>
void arrayIN(size_t r, size_t c, int ray[r][c]);
void arraySUM(size_t r, size_t c, int ray1[r][c], int ray2[r][c], int sumRay[r][c]);
void printRay(size_t r, size_t c, int ray[r][c]);
int main(void)
{
size_t r,c;
printf("Enter the number of ROWS: ");
scanf("%zu", &r);
printf("Enter the number of COLUMNS: ");
scanf("%zu", &c);
int ray1[r][c], ray2[r][c], sumRay[r][c];
printf("\n");
printf("Input integers for Array %d.\n", 1);
arrayIN(r, c, ray1);
putchar('\n');
printRay(r, c, ray1);
putchar('\n');
printf("Input integers for Array %d.\n", 2);
arrayIN(r, c, ray2);
putchar('\n');
printRay(r, c, ray2);
putchar('\n');
arraySUM(r, c, ray1, ray2, sumRay);
printRay(r, c, sumRay);
putchar('\n');
return 0;
}
void arrayIN(size_t r, size_t c, int ray[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
printf("Enter Number for [ROW:%zu COL:%zu]: ", i, j);
scanf("%d", &ray[i][j]);
}
}
}
void arraySUM(size_t r, size_t c, int ray1[r][c],int ray2[r][c], int sumRay[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
sumRay[i][j] = ray1[i][j] + ray2[i][j];
}
}
}
void printRay(size_t r, size_t c, int ray[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
printf("%8d",ray[i][j]);
}
putchar('\n');
}
}
В качестве следующего шага, вы можете добавить некоторые проверки ошибок на вход кода, проверка возвращаемых значений из вызовов scanf()
. И, как бы то ни было, неудобно вводить числа для массивов, запрашивая каждый элемент. Вы можете поэкспериментировать с способами улучшения этого.
Update
Если ваша истинная цель состоит в том, чтобы объединить только начальные строки и столбцы ваших массивов, приведенный выше код работает только с незначительной модификацией. Вы все равно должны использовать VLA, но вместо определения глобальных констант MAXROW
и MAXCOL
определите const size_t maxrow
и const size_t maxcol
в теле main()
. В любом случае вы должны передавать эти размеры массива в функции, не полагаясь на глобальные значения.
Добавлена функция, partArraySUM()
, с именем, которое более точно отражает его назначение. Только разница между этой функцией и arraySUM()
заключается в том, что входные массивы ray1[][]
и ray2[][]
имеют разные размеры, чем массив sumRay[][]
, который содержит результаты. Для этого нет необходимости хранить отдельные индексы.
#include <stdio.h>
#include <stdlib.h>
void arrayIN(size_t r, size_t c, int ray[r][c]);
void arraySUM(size_t r, size_t c, int ray1[r][c], int ray2[r][c], int sumRay[r][c]);
void partArraySUM(size_t r_sz, size_t c_sz, int ray1[r_sz][c_sz], int ray2[r_sz][c_sz], size_t r, size_t c, int sumRay[r][c]);
void printRay(size_t r, size_t c, int ray[r][c]);
int main(void)
{
const size_t maxrow = 3;
const size_t maxcol = 3;
size_t r,c;
printf("Enter the number of ROWS: ");
scanf("%zu", &r);
printf("Enter the number of COLUMNS: ");
scanf("%zu", &c);
int ray1[maxrow][maxcol], ray2[maxrow][maxcol], sumRay[r][c];
printf("\n");
printf("Input integers for Array %d.\n", 1);
arrayIN(maxrow, maxcol, ray1);
putchar('\n');
printRay(maxrow, maxcol, ray1);
putchar('\n');
printf("Input integers for Array %d.\n", 2);
arrayIN(maxrow, maxcol, ray2);
putchar('\n');
printRay(maxrow, maxcol, ray2);
putchar('\n');
partArraySUM(maxrow, maxcol, ray1, ray2, r, c, sumRay);
printRay(r, c, sumRay);
putchar('\n');
return 0;
}
void arrayIN(size_t r, size_t c, int ray[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
printf("Enter Number for [ROW:%zu COL:%zu]: ", i, j);
scanf("%d", &ray[i][j]);
}
}
}
void arraySUM(size_t r, size_t c, int ray1[r][c],int ray2[r][c], int sumRay[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
sumRay[i][j] = ray1[i][j] + ray2[i][j];
}
}
}
void partArraySUM(size_t r_sz, size_t c_sz, int ray1[r_sz][c_sz], int ray2[r_sz][c_sz], size_t r, size_t c, int sumRay[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
sumRay[i][j] = ray1[i][j] + ray2[i][j];
}
}
}
void printRay(size_t r, size_t c, int ray[r][c])
{
for(size_t i = 0; i < r; i++) {
for(size_t j = 0; j < c; j++) {
printf("%8d",ray[i][j]);
}
putchar('\n');
}
}
Пример взаимодействие: нужно
Enter the number of ROWS: 2
Enter the number of COLUMNS: 2
Input integers for Array 1.
Enter Number for [ROW:0 COL:0]: 1
Enter Number for [ROW:0 COL:1]: 2
Enter Number for [ROW:0 COL:2]: 3
Enter Number for [ROW:1 COL:0]: 4
Enter Number for [ROW:1 COL:1]: 5
Enter Number for [ROW:1 COL:2]: 6
Enter Number for [ROW:2 COL:0]: 7
Enter Number for [ROW:2 COL:1]: 8
Enter Number for [ROW:2 COL:2]: 9
1 2 3
4 5 6
7 8 9
Input integers for Array 2.
Enter Number for [ROW:0 COL:0]: 1
Enter Number for [ROW:0 COL:1]: 1
Enter Number for [ROW:0 COL:2]: 1
Enter Number for [ROW:1 COL:0]: 1
Enter Number for [ROW:1 COL:1]: 1
Enter Number for [ROW:1 COL:2]: 1
Enter Number for [ROW:2 COL:0]: 1
Enter Number for [ROW:2 COL:1]: 1
Enter Number for [ROW:2 COL:2]: 1
1 1 1
1 1 1
1 1 1
2 3
5 6
Хммм я бы ожидать, '<', а не '<=' 'в течение (х = 0, х <= г; х ++ ++ я) ' – chux