2009-07-22 2 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를 & 등, 또는 오버라이드 (override) 기능, 또는 그룹 데이터를 사용하고 함수에 그를 통과 할 수 있습니다 !

std::vector<int> data; 

data.push_back(55); 

// just push_back data! 

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

편집 : 당신이 에두아르의 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 사용을 선호하지만 부스트가 있는지 확실하지 않습니다.

#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로는 argc 및 argv를 같이 전달은 ARGV이 널들의 어레이는 이러한 인수

는 argv [0] 프로그램 자체가 나타내는 종료 문자열 인 파라미터의 개수 .

2/당신은

+0

감사합니다. 구조체 대체품을 체크인 할 것입니다. 아마 여기 내가 필요한 것입니다! –

1

난 당신이 myFunction이 함께 일을하려고하는지 정말 모르겠어요하지만 클래스를 확인 (또는 구조체) 중 하나 a struct을 만들어보고 또는 std::vector

+0

링크를 이용해 주셔서 감사합니다. 도움이됩니다. 그렇습니다. 구조를 만들려고합니다. –

0

를 전달하려는 것 같은데 AllVariables 그것을 전달하십시오.

런타임에 컴파일 타임을 정의할지 또는 컴파일 타임에 정의 할지를 말하지 않습니다.컴파일시에 정의하고 싶으면 N을 컴파일러 명령 행 인자로 정의 할 수 있습니다.