无法在 C++ 中的循环后执行代码

Cannot execute code after the loop in c++

我遇到了一个我不明白的 c++ 问题。

这是我的代码:

auto DataArray = jvalue.at(U("data")).as_array();
std::cout << "Outside the loop, first output" << std::endl;

for (int i = 0; i <= 10; i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}

std::cout << "Outside the loop, second output" << std::endl;

输出:

Outside the loop, first output
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
inside the loop
Press any key to continue . . .

似乎代码在循环结束后停止。 但是为什么?

但是如果我注释掉

//auto data = DataArray[i];
//auto dataObj = data.as_object();

没有问题。

顺便说一句,我正在处理 cpprest 并从 api 获取 json 对象数据。 jvalue 变量保存结果。

如果我尝试捕捉代码:

try {
    auto data = DataArray[i];
    auto dataObj = data.as_object();
    std::wcout << "inside the loop" << std::endl;
}
catch (const std::exception& e) {
    std::wcout << e.what() << std::endl;
}

结果是无限循环,输出:not an object

请帮忙。谢谢。

我认为您应该在循环中使用 i < 10 而不是 i <= 10

for (int i = 0; i < 10; i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}

你的最后一次迭代没有在循环内输出。它在那里失败了,没有 DataArray[10] with 10 index

更好的是使用 DataArray.size() 而不是 i < 10

for (int i = 0; i < DataArray.size(); i++)
{
    auto data = DataArray[i];
    auto dataObj = data.as_object();

    std::wcout << "inside the loop" << std::endl;
}