Frage

Gibt es eine Möglichkeit, eine globale Variable durch Benutzereingabe zu definieren? Nehmen wir an, ich benutze

#include...

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

void main();...

Aber ich möchte, dass der Benutzer auswählen kann, was N ist. Muss ich n als lokale Variable haben oder gibt es einen Weg um (ohne Makros)? Ich habe ein ziemlich kleines Programm, aber mit vielen verschiedenen Variablen, die den N -Wert benötigen.

Alternativ kann ich eine Möglichkeit geben, eine Gruppe von Variablen in eine Funktion zu schicken, ohne sie jedes Mal explizit auszuschreiben.

zum Beispiel

myfunction(var1,var2,var3...)

und schreiben stattdessen so etwas wie

myfunction(Allvariables)

Vielen Dank für Ihre Antworten! Dies ist ein tolles Forum.

War es hilfreich?

Lösung

int* data;

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

    data = new int[n];

    // use data.

    .
    .

    delete[] data;
}

Oder vergessen Sie einfach Zeiger für immer und verwenden Sie Vektor!

std::vector<int> data;

data.push_back(55);

// just push_back data!

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

Edit :: Wenn Sie Edouard A. Way verwenden möchten :)

#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;
}

Ich benutze in diesem Fall lieber lexical_cast, bin mir aber nicht sicher, ob Sie Boost haben.

#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;
}

Andere Tipps

1/ Ja, aber Sie benötigen eine dynamische Speicherzuweisung. Die Programmparameter werden als Argc und Argv an die Hauptfunktion übergeben

int main(int argc, char **argv)

ARGC ist die Anzahl der Parameter Argv ist das Array von Null -Kündigungszeichenfolgen, die diese Argumente darstellen

Argv [0] ist das Programm selbst.

2/Sie können entweder die variadische Funktion va_start & dergleichen verwenden oder überschreiben oder Ihre Daten in einer Struktur gruppieren und diese an die Funktion übergeben

Nein, das kann nicht so gemacht werden. Sie müssen eine dynamische (Laufzeit-) Speicherzuweisung verwenden (Neu[). Um eine statische (Kompilierungszeit-) Speicherzuweisung durchzuführen, muss der Compiler die Speicherblockgröße zur Kompilierungszeit kennen.

Ich bin mir nicht sicher, was Sie mit MyFunction versuchen, aber es hört sich so an, als ob Sie sich eines der beiden erstellen möchten eine Struktur oder passieren a std :: vector

Machen Sie eine Klasse (oder Struktur) Allvariablen und geben Sie das ein.

Sie sagen nicht, ob Sie N zur Laufzeit definieren oder die Zeit kompilieren möchten. Wenn Sie möchten, dass es zur Kompilierungszeit definiert wird, können Sie N als Compiler -Befehlszeile definieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top