2009-07-22 32 views
0

ユーザー入力によってグローバル変数を定義する方法はありますか? は私がC++のグローバル変数を変更する

#include... 

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

void main();... 

を使用すると言うしかし、私はNが何であるかを選択できるようにユーザーをしたいと思います。 ローカル変数としてNを持たなければならないのですか、これを回避する方法がありますか? 私はかなり小さいプログラムを持っていますが、N値を必要とする多くの異なる変数があります。

また、 は私が明示的にするたびにそれらを記述することなく、関数に変数のグループを送ることができる方法があります。例

myfunction(var1,var2,var3...) 

ため

し、代わりにあなたの答えを

myfunction(Allvariables) 

おかげでたくさんのような何かを書きます! これはすばらしいフォーラムです。

答えて

4
int* data; 

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

    data = new int[n]; 

    // use data. 

    . 
    . 

    delete[] data; 
} 

またはちょうどは永遠にポインタを忘れて、ベクトルを使用した構造で可変引数関数のva_start &のような、あるいはオーバーライド機能、またはグループあなたのデータを使用し、機能にそれを渡すことができますいずれか!

std::vector<int> data; 

data.push_back(55); 

// just push_back data! 

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

EDIT :: あなたはエドゥアールの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使用するprefere、私はあなたがブーストを持っているかどうかわからないです。

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

ありがとうございました!私は結局ベクトルを使用して終了しました! そしてチャームのように働いた! –

1

いいえ、そうすることはできません。動的(ランタイム)メモリ割り当て(new [])を使用する必要があります。静的(コンパイル時)メモリ割り当てを実行するには、コンパイラは、コンパイル時にメモリブロックのサイズを知る必要があります。

2

1 /はいますが、動的メモリ割り当てを必要とします。プログラムパラメータは

int main(int argc, char **argv) 

ARGCパラメータ ARGVの数であり、主な機能へのargcとargvとして渡される[0]はプログラム自体でこれらの引数を

ARGVを表す文字列のNULL終端の配列であります。

2 /あなたは

+0

ありがとうございます、私は構造の代替をチェックします、それはおそらく私がここに必要なものです! –

1

私はあなたがMyFunctionをして何をしようとして本当によく分からないが、あなたがクラスを作成します(または構造体)のいずれかa structの作成を見たりstd::vector

+0

リンクをありがとう、彼らは役に立つとはい、私は構造を作成したい.. –

0

を渡したいように聞こえるAllVariablesそして中にそれを渡す。

をあなたは実行時に定義されたNをしたいか、時間をコンパイルするかどうかを言うことはありません。コンパイル時に定義したい場合は、Nをコンパイラのコマンドライン引数として定義することができます。

関連する問題