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!

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

编辑 :: 如果你想使用 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 回答
2

1/ 是的,但您需要动态内存分配。程序参数作为 argc 和 argv 传递给主函数

int main(int argc, char **argv)

argc 是参数的数量 argv 是代表这些参数的以空字符结尾的字符串数组

argv[0] 是程序本身。

2/您可以使用可变参数函数 va_start 等,或者覆盖函数,或者将数据分组到一个结构中并将其传递给函数

于 2009-07-22T12:06:32.257 回答
1

不,不能这样。您需要使用动态(运行时)内存分配(new[])。要执行静态(编译时)内存分配,编译器需要在编译时知道内存块大小。

于 2009-07-22T12:05:34.740 回答
1

我不太确定你想用 myFunction 做什么,但听起来你想看看创建一个结构或传递一个std::vector

于 2009-07-22T12:09:14.983 回答
0

创建一个类(或结构)AllVariables 并将其传入。

您没有说是否要在运行时或编译时定义 N 。如果您想在编译时定义它,您可以将 N 定义为编译器命令行参数。

于 2009-07-22T12:10:35.917 回答