循环在不应该终止的地方终止程序

loop terminates program where it shouldn`t

我正在练习,出于某种原因,如果向量有任何内容,选择 == p 会终止我的程序。我做错了什么?

我用for循环和while循环都试过了,结果是一样的:(

do
{
    cout << "Enter your choice: ";
    cin >> selection;

    if (selection == 'p' || selection == 'P')
    {
        if (numbers.size() == 0)
        {
            cout << "[] The vector is empty" << endl << endl;
        }
        else
        {
            cout << "[ ";
            int i = 0;
            while (i <= numbers.at(i))
            {
                cout << numbers.at(i) << ' ';
                i++;
            }
            // for (int i = 0; i <= numbers.size(); i++)
            //     cout << numbers.at(i) << ' ';
            cout << "]" << endl;
        }
    }
} while (selection != 'q' && selection != 'Q');

对于初学者这些循环

while (i <= numbers.at(i))
{
    cout << numbers.at(i) << ' ';
    i++;
}

for (int i = 0; i <= numbers.size(); i++)

不等价。

第一个循环中的条件没有意义。

第二个循环中的条件调用未定义的行为,因为索引 i 可能不等于 tp numbers.size().

你需要写

for ( size_t i = 0; i < numbers.size(); i++ )

这是一个演示程序。

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> numbers = { 1, 2, 3, 4, 5 };
    
    std::cout << "[ ";
    
    for ( size_t i = 0; i < numbers.size(); i++ )
    {
        if ( i ) std::cout << ", ";
        std::cout << numbers[i];
    }
    
    std::cout << " ]\n";
    
    return 0;
}

程序输出为

[ 1, 2, 3, 4, 5 ]