如何限制未知数组大小的循环大小

时间:2019-11-14 09:09:45

标签: c++ arrays fstream

我遇到一个不知道数组大小的问题,当我需要在数组中提示信息时,我不知道如何限制循环的大小,以便仅提示数组中的内容并退出循环。最初,我为数组索引声明9999,因为我不知道用户将输入多少信息。此分配中不允许使用向量和数组指针,还有其他解决方法吗?

这是我的代码

var cc = "role:" + user;
var jsonParam = `{ "classLevelPermissions" : { "get": { "*": true, " ${cc} "  :  true }, "find": {"*": true," ${cc}"  :  true }, "create": { " ${cc}"  :  true }, "update": { "${cc}" :  true }, "delete": { " ${cc} "  :  true } } }`;

如果使用我的代码并且用户输入的数据为3,1111,2222,3333 输出将是 1111 2222 3333 0 0 0 0 0 0 0 0 0 0 ..........

3 个答案:

答案 0 :(得分:2)

为什么要运行9999次循环?当您问用户要输入多少个产品代码时?一直运行到< num

for(int i=0 ; i < num ; i++)
    {
        cout << product_code[i] << endl;
    }

system("pause");

答案 1 :(得分:2)

如果您不确切知道可以从文件或其他输入中读取的数据大小,请使用std::vector。它是一个动态扩展的数据结构,具有易于使用的接口,并在堆上分配。 不要为此目的使用静态数组。您在堆栈上为9999个整数分配了内存,许多数组项可能仍未使用。在这种情况下,您还应该保留更多的已读项目。

它真的很容易使用。

std::vector<int> product_code;
ReadData (product_code);
...

void ReadData(std::vector<int>& p_code)
{
    ifstream indata;
    indata.open("productlist.txt");
    int value{0}
    while (indata >> value)
    {
        p_code.push_back(value);
    }
    indata.close();
}

填写product_code后,可以得到它的大小:

product_code.size();

并且可以按索引访问任何项目:

for(size_t idx = 0; idx < product_code.size(); ++idx)
{
    std::cout << product_code[idx] << std::endl;
}

或通过基于范围的用于:

for(int value : product_code)
{
    std::cout << value << std::endl;
}

答案 2 :(得分:0)

首先,您的代码存在严重缺陷,即“ ReadData(product_code,9999);”。将溢出product_code数组。

您需要使用动态分配,因为您的程序在从文件中加载所有“产品代码”之前,不知道它们的数量。甚至更好,请使用std :: vector,因为此标准类已经实现了您将需要重新发明的所有功能。