Ok, quindi ho qualche problema con gli iostream di C++ che sembra molto strano, ma probabilmente è un comportamento definito, considerando che questo accade sia con MSVC++ sia con G ++.Perché l'overflow dei numeri interi causa errori negli iostream di C++?
Dire che ho questo programma:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
cin >> a;
cout << a << endl;
return 0;
}
Se ho volutamente troppo pieno, dando il primo cin un valore che è maggiore del limite massimo di un int, tutte le ulteriori chiamate a cin.operator>>()
ritorna immediatamente per qualche motivo e a
è impostato su un valore. Il valore sembra essere indefinito.
Perché e dove viene documentato questo comportamento? C'è un modo per capire se si è verificato un tale overflow?
Inoltre, questo programma simile sembra funzionare come intendo. Se esagero il valore, darà un valore a a
e continuerà come se l'overflow non fosse mai successo.
#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;
}