C++/动态赋值

C++/ Dynamic Assignment

创建 *Std 作为全局变量。

输入多少就创建多少*StdNum

此代码未执行,因为 Num 包含在 main() 中。

有没有办法在从 main() 获取 Num 输入时将 *Std 设置为全局变量?

#include <iostream>
#include <string>
using namespace std;

struct s1 {
    string str1;
};

s1* Std = new s1[Num];

int main()
{
    cout << "How many [Std] do you want to create? : ";
    int Num;
    cin >>Num;

    for (int i = 0; i < Num; i++)
    {
        getline(cin, Std[i].str1);
        cout << "\nStd["<<i<<"].str1 : " << Std[i].str1<<"\n\n";
    }
}

变量不必在声明时初始化。您可以将声明与赋值分开。

在这种情况下,您可以将 Std 保留为全局变量,如果您真的想这样做(尽管 globals are generally frowned upon,在这种情况下没有必要,因为没有其他函数需要访问 Std),但是你必须在读入 Num 之后将 new[] 语句移动到 main(),例如:

#include <iostream>
#include <string>
using namespace std;

struct s1 {
    string str1;
};

s1* Std;

int main()
{
    cout << "How many [Std] do you want to create? : ";
    int Num;
    cin >>Num;

    Std = new s1[Num];

    for (int i = 0; i < Num; i++)
    {
        getline(cin, Std[i].str1);
        cout << "\nStd[" << i << "].str1 : " << Std[i].str1 << "\n\n";
    }

    delete[] Std;
}

也就是说,只要您需要动态数组,就应该使用标准 std::vector 容器,例如:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct s1 {
    string str1;
};

vector<s1> Std;

int main()
{
    cout << "How many [Std] do you want to create? : ";
    int Num;
    cin >>Num;

    Std.resize(Num);

    for (int i = 0; i < Num; i++)
    {
        getline(cin, Std[i].str1);
        cout << "\nStd[" << i << "].str1 : " << Std[i].str1 << "\n\n";
    }
}