C программа печатает неправильный вывод - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь создать программу, которая печатает матрицу целых чисел, но вывод возвращает странные числа перед фактической матрицей.Нет ошибок компиляции.

Вот так выглядит мой код: // пока игнорируем функцию void, сосредоточимся на основной функции ::

#include <stdio.h>
#include <stdlib.h>
//array[30][30] = 2D array of max 30 rows and 30 columns
//n = number of rows and columns
void printmatrix(int array[30][30], int n){
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d", array[i][j]);
        }

        printf("\n");
    }

    return;
}

int main(){
    int n;
    scanf("%d", &n);

    int ints2D[n][n];

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            scanf("%d", &ints2D[i][j]);
        } 
    }

    printmatrix(ints2D, n);

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d ", ints2D[i][j]);
        }

        printf("\n");
    }

    return 0;
}

И это мой вывод (яхочу только последние три строки)

123
-514159984327663
-51415932632766-514159305
1 2 3 
4 5 6 
7 8 9 

Ответы [ 2 ]

2 голосов
/ 28 сентября 2019

Вам не хватает пробела в "%d" в printmatrix, и, что более важно, неправильно передавать массив int [n][n] для параметра int [30][30], если n не равен 30.

Измените void printmatrix(int array[30][30], int n) на void printmatrix(int n, int array[n][n]) и измените printmatrix(ints2D, n); на printmatrix(n, ints2D);.Это делает тип передаваемого аргумента совпадающим с типом параметра.

1 голос
/ 28 сентября 2019

В своих аргументах функции вы определили массив как фиксированный размер ([30] [30]), но вы передаете VLA ([3] [3] в вашем примере), который заставляет его находить неинициализированную память и почему вы видитестранные цифры.

@ Эрик Постпишил ответ на месте.Другой способ решить эту проблему: 2d массивы могут быть сведены в 1d.Вот рабочий код для вас:

#include <stdio.h>
#include <stdlib.h>
//array[30][30] = 2D array of max 30 rows and 30 columns
//n = number of rows and columns
void printmatrix(int *array, int n){
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d ", array[i * n + j]);
        }
    printf("\n");
    }
return;
}

int main(){
    int n;
    scanf("%d", &n);
    int ints2D[n * n];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            scanf("%d", &ints2D[i * n + j]);
        }
    }
    printmatrix(ints2D, n);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d ", ints2D[i * n + j]);
        }
        printf("\n");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...