0

ユーザー入力によってグローバル変数を定義する方法はありますか? 私が使うとしましょう

#include...

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

void main();...

しかし、ユーザーが N を選択できるようにしたいと思います。N をローカル変数として持つ必要がありますか、それとも (マクロなしで) これを回避する方法はありますか? 私はかなり小さなプログラムを持っていますが、N 値を必要とするさまざまな変数がたくさんあります。

または、変数のグループを毎回明示的に書き出さなくても関数に送信できる方法はありますか。

例えば

myfunction(var1,var2,var3...)

代わりに次のようなものを書きます

myfunction(Allvariables)

回答ありがとうございます。これは素晴らしいフォーラムです。

4

5 に答える 5

4
int* data;

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

    data = new int[n];

    // use data.

    .
    .

    delete[] data;
}

または、ポインタを永遠に忘れてベクトルを使用してください!

std::vector<int> data;

data.push_back(55);

// just push_back data!

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

EDIT :: Edouard A.の方法を使用したい場合:)

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

この場合、lexical_cast を使用することを好みますが、Boost があるかどうかはわかりません。

#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;
}
于 2009-07-22T12:08:11.660 に答える
1

myFunction で何をしようとしているのかよくわかりませんが、構造体を作成するか、 std::vectorを渡すかを調べたいようです

于 2009-07-22T12:09:14.983 に答える
0

クラス (または構造体) AllVariables を作成し、それを渡します。

実行時またはコンパイル時に N を定義するかどうかはわかりません。コンパイル時に定義する場合は、N をコンパイラ コマンド ライン引数として定義できます。

于 2009-07-22T12:10:35.917 に答える