我遇到一个不知道数组大小的问题,当我需要在数组中提示信息时,我不知道如何限制循环的大小,以便仅提示数组中的内容并退出循环。最初,我为数组索引声明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 ..........
答案 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,因为此标准类已经实现了您将需要重新发明的所有功能。