Pregunta

¿Hay alguna forma de definir una variable global por entrada del usuario? Digamos que uso

#include...

#define N 12
double array[N][N]; 

void main();...

Pero me gustaría que el usuario pueda elegir qué es. ¿Tengo que tener N como una variable local o hay una forma de evitar esto (sin macros)? Tengo un programa bastante pequeño pero con muchas variables diferentes que necesitan el valor N.

Alternativamente, ¿hay alguna forma de enviar un grupo de variables a una función sin tener que escribirlas explícitamente cada vez?

por ejemplo

myfunction(var1,var2,var3...)

Y en su lugar, escribe algo como

myfunction(Allvariables)

¡Muchas gracias por sus respuestas! Este es un gran foro.

¿Fue útil?

Solución

int* data;

int main()
{
    int n;
    // get n from the user.

    data = new int[n];

    // use data.

    .
    .

    delete[] data;
}

¡O simplemente olvida los consejos para siempre y usa Vector!

std::vector<int> data;

data.push_back(55);

// just push_back data!

=======================================================================

Editar :: Si quieres usar Edouard A. Way :)

#include <iostream>
#include <sstream>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<double>::size_type dataSize = 0;
    std::stringstream convertor(argv[1]);
    {
        if(argc > 1)
        {
            convertor >> dataSize;

            if(convertor.fail() == true)
            {
                // do whatever you want here in case
                // the user didn't input a number.
            }
        }
    }
    std::vector<double> data(dataSize);

    // use the vector here.

    return 0;
}

Prefiero usar lexical_cast en este caso, pero no estoy seguro de si tiene impulso.

#include <iostream>
#include <vector>
#include <boost/lexical_cast.hpp>

int main(int argc, char* argv[])
{
    typedef std::vector<double>::size_type vectorSize;

    if(argc < 2)
    {
        // err! The user didn't input anything.
    }

    vectorSize dataSize = boost::lexical_cast<vectorSize>(argv[1]);
    std::vector<double> data(dataSize);

    // use the vector here.

    return 0;
}

Otros consejos

1/ sí, pero necesita asignación de memoria dinámica. Los parámetros del programa se pasan como argc y argv a la función principal

int main(int argc, char **argv)

Argc es el número de parámetros Argv es la matriz de cadenas nulas terminadas que representan estos argumentos

Argv [0] es el programa en sí.

2/Puede usar la función variádica VA_START y similares, o las funciones anulando, o agrupar sus datos en una estructura y pasarlo a la función

No, eso no se puede hacer de esta manera. Debe usar la asignación de memoria Dynamic (tiempo de ejecución) (nuevo[). Para realizar la asignación de memoria estática (tiempo de compilación), el compilador necesita conocer el tamaño del bloque de memoria en el momento de la compilación.

No estoy realmente seguro de lo que estás tratando de hacer con MyFunction, pero parece que quieres mirar cualquiera de una estructura o pasar un std :: vector

Haga una clase (o estructura) Allvariables y pase eso.

No dices si quieres N definido en tiempo de ejecución o tiempo de compilación. Si desea que se define en el momento de la compilación, puede definir N como un argumento de línea de comando del compilador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top