none
Usuario asigne tamaño del arreglo en c++ RRS feed

  • Pregunta

  • Hola tengo un problema, necesito un programa q el usuario asigne el tamaño del arreglo. Este es el codigo q tengo, es en dev c++

    #include <iostream>
    #define SIZE 12
    #include <cstdlib>

    using std::cout;
    using std::cin;
    using std::endl;

    void imprimir(int* a);
    int main()
    {

    int s =5;
    cout << "Introduce el tamanio del arreglo: ";
    cin >> s;
    int a[s]; //ES AQUI EL PROBLEMA!!!!!

    cout << endl;
    for (int i = 0 ; i < s ; i++)
    {
    cout << "Introduzca nuevo valor para el arreglo: ";
    cin >> a[i];
    }
    cout << "Luego de los valores introducidos, el arreglo quedo asi: " << endl;
    imprimir(a);

    system("PAUSE");
    return EXIT_SUCCESS;
    }
    void imprimir(int* a)
    {
    for(int i=0; i<SIZE; i++)
    cout << a[i] << " ";
    cout << endl;
    }

    al momento de imprimir me da los valores q ingrese MAS unos valores todos raros!!
    como puedo solucionar esto! yo veo q es porq no inicializo el arreglo, pero si lo hago me da error!!!

    Favor su ayuda! Gracias!
    viernes, 14 de diciembre de 2012 5:13

Respuestas

  • No se puede utilizar la creación de un array estático con un valor dinámico. Debes crear un array dinámico mediante new[]. Pôsteriormente deberás destruirlo con delete[]. Mis consejos son los siguientes:

    1º suprime la linea #define SIZE 12

    2º redefine void imprimir(int *a); por void imprimir(int *a, int s);

    3º cambia la linea problema por: int *a=new int[s];

    4º Cambia la llamada imprimir(a) por imprimir(a,s);

    5º Añade después la linea: delete[] a;

    6º Cambia la función imprimir para que acepte los dos argumentos y utiliza el segundo argumento en vez de 'SIZE'.

    Con esto tendría que funcionar

    viernes, 14 de diciembre de 2012 21:21

Todas las respuestas

  • No se puede utilizar la creación de un array estático con un valor dinámico. Debes crear un array dinámico mediante new[]. Pôsteriormente deberás destruirlo con delete[]. Mis consejos son los siguientes:

    1º suprime la linea #define SIZE 12

    2º redefine void imprimir(int *a); por void imprimir(int *a, int s);

    3º cambia la linea problema por: int *a=new int[s];

    4º Cambia la llamada imprimir(a) por imprimir(a,s);

    5º Añade después la linea: delete[] a;

    6º Cambia la función imprimir para que acepte los dos argumentos y utiliza el segundo argumento en vez de 'SIZE'.

    Con esto tendría que funcionar

    viernes, 14 de diciembre de 2012 21:21
  • Tal como lo indica Bartomeu, la línea int a[s]; no es ANSI C legal.  Hasta donde sé solamente hay un compilador que permitiría dicha sintaxis, pero la verdad no se la recomiendo en lo absoluto.

    Nótese que DevC++ es un proyecto abandonado y está muy desactualizado.  No recomiendo su uso bajo ninguna circunstancia.  Busque wxDev-C++ o muévase a Visual Studio.

    Finalmente, si es C++ le recomiendo usar std::vector<>, pero bueno, si no le es posible, siga las indicaciones de Bartomeu para crear arreglos en memoria dinámica.


    Jose R. MCP
    Code Samples

    domingo, 16 de diciembre de 2012 22:41
    Moderador