如果在里面,而错误

If inside while error

本文关键字:错误 在里面 如果      更新时间:2023-10-16
int main()
{
    vector<int>numbers;
    int numb = 0;
    int i = 0;
    int j = i - 1;
    while (cin >> numb)
    {
        if (numb == numbers[j]) HERE IS THE PROBLEM!* 
        {
            cout << "Numbers repeatedn";
        }

    numbers.push_back(numb);
    cout << "numbers[" << i << "] = " << numbers[i] << endl;

    ++i;
}

/*** 我不明白为什么异常、运行时错误、中断或任何它命名的东西......

在循环的第一次迭代中,j为 -1。访问numbers[-1]是未定义的行为,因为索引在向量边界之外。

事实上,在向量中放入某些内容之前,访问任何索引都是越界的,因此在至少调用push_back一次之前,您根本无法索引numbers

如果用户输入向量中已有的数字,此代码将显示消息:

while (cin >> numb) {
    vector<int>::iterator found = std::find(numbers.begin(), numbers.end(), numb);
    if (found == numbers.end()) {
        cout << "Numbers repeated" << endl;
    }
    // If you don't want duplicate numbers in the vector, move this statement
    // into an "else" block on the last "if" block.
    numbers.push_back(numb);
}

另一方面,此代码仅在数字与最后一个输入的数字相同时显示消息,也就是说,如果序列号相同:

while (cin >> numb) {
    if (!numbers.empty() && numb == numbers.back()) {
        cout << "Numbers repeated" << endl;
    }
    numbers.push_back(numb);
}

您需要使用初始数据初始化数字向量,或者检查以确保 j 在向量大小内。向量本质上是一个数组,像任何数组一样,你不能越界。

if (j < numbers.size() && numb == numbers[j]) HERE IS THE PROBLEM!* 
{
    cout << "Numbers repeatedn";
}