Cómo pasaré una matriz 2D en una función. Tomo la entrada del teclado, pero cuando la paso a la función no funciona.

Por ejemplo

#include<bits/stdc++.h>

using namespace std;

void printGrid(int M, int N, int arr[][N])
{
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    int arr[M][N];
    printGrid(M,N,arr);
    return 0;
}

Esta solución no funciona. Dice que N no fue declarado en este ámbito.

¿Hay alguna forma de trabajar con una matriz 2D en Function?

-4
MadMaxHaSaN 17 oct. 2017 a las 14:34

3 respuestas

La mejor respuesta

¿Por qué no intentas algo como esto?

#include <iostream>
#include <vector>

using namespace std;

void print(const vector<vector<int>>& arr) {
    for(auto& subArr : arr) {
        for(auto& element : subArr) {
            cout << element << ' ';
        }
        cout << '\n';
    }
}

int main() {

    int M,N;
    cin >> M >> N;
    vector<vector<int>> arr(M, vector<int>(N));
    print(arr);
}

Este código no hace mucho, solo inicializa la matriz 2D a ceros e imprime, pero ese no es el punto. Muestra algunas técnicas que debe usar si está codificando usando C ++ moderno. Además, resuelve su problema de imprimir una matriz 2D en este caso implementado como un vector de vectores.

Recomiendo leer sobre std::vector: cppreference.com - std :: vector

0
navyblue 17 oct. 2017 a las 12:03

Estás compilando tu código de la manera incorrecta. int arr[][N] es una matriz de longitud variable (VLA). Esta es una característica que se introdujo en el lenguaje C en el año 1999. Si usa un compilador que es más antiguo que eso, o si usa un compilador de C ++, obtendrá el error descrito.

¡Asegúrese de compilar su código con un compilador C compatible con el estándar! Debe usar un compilador que admita el estándar C99 o posterior. Por ejemplo, podría usar el compilador GCC versión 5.x. O si usa una versión anterior de ese compilador, configure la opción del compilador gcc -std=c99.

3
Lundin 17 oct. 2017 a las 11:47

Solución de mi problema ... Gracias por su respuesta chicos ..

#include<stdio.h>
#define MAX 500

int arr[MAX][MAX];

void printGrid(int M, int N)
{
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    printGrid(M,N);
    return 0;
}

Este código funciona la limitación que le das a la matriz

-2
MadMaxHaSaN 17 oct. 2017 a las 12:06