数组在C++中自动填充

GDV*_*GDV 4 c++ arrays integer-overflow cin

我正在学习C++,做一些简单的例子,并发现了这种奇怪的行为.当填充整数数组的元素时,如果任何元素设置为大于2147483647(我认为是最大整数值?),则数组中的其余元素将设置为该确切数字,每个其中之一.

我理解如果一个元素超出其类型限制,编译器会将其限制为该限制,但我无法理解为什么它与其他项目做同样的事情,甚至没有要求用户填充它们.

这是我运行的一个简单测试:

#include <iostream>
using namespace std;

int main()
{
    int test[5];
    int num = 0;

    for (int i=0; i<5; i++)
    {
        cout << "Enter the number in position " << i << endl;
        cin >> num;
        test[i] = num;
    }

    cout << "Values in the array: " <<endl;
    for (int i=0; i<5; i++)
        cout << test[i] << endl;

}
Run Code Online (Sandbox Code Playgroud)

感谢您阅读,评论和帮助!

eca*_*mur 7

文件std::istream::operator>>:

如果提取导致值太大或太小而无法放入value,std::numeric_limits<T>::max()或者std::numeric_limits<T>::min()被写入并且failbit设置了标志.

一旦failbit标志设置,后续输入操作不会有任何影响,这意味着aux将保持不变.

如果要在转换失败后继续提取项目,则需要clearfailbit:

    cin.clear();
    cin >> aux;
Run Code Online (Sandbox Code Playgroud)