Ok, do đó, tôi có một số vấn đề với C++ iostreams mà cảm thấy rất kỳ quặc, nhưng nó có thể được xác định hành vi, xem xét điều này xảy ra với cả hai MSVC++ và G + +.Tại sao lỗi tràn số nguyên gây ra lỗi với C++ iostream?
Nói rằng tôi có chương trình này:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
cin >> a;
cout << a << endl;
return 0;
}
Nếu tôi cố tình tràn bằng cách cho người đầu tiên cin một giá trị có nghĩa là lớn hơn giới hạn tối đa của một int, tất cả các cuộc gọi hơn nữa để cin.operator>>()
sẽ ngay lập tức quay trở lại vì một lý do và a
được đặt thành một số giá trị. Giá trị có vẻ không xác định.
Tại sao và hành vi này được ghi lại ở đâu? Có cách nào để tìm ra nếu một tràn như vậy xảy ra?
Ngoài ra, chương trình tương tự này có vẻ hoạt động như tôi dự định. Nếu tôi tràn giá trị, nó sẽ cung cấp cho a
một số giá trị và tiếp tục như thể tràn không bao giờ xảy ra.
#include <cstdio>
using namespace std;
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
return 0;
}