Ymmärsinkö oikein, että tuossa menee jokin pieleen? Muunto näyttäisi kuitenkin tapahtuvan kuten pitääkin.. Mitä minun pitäsi siis muuttaa tuosta?
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
string merkkijono = "152";
int numero;
istringstream ss(merkkijono);
ss >> numero;
cout << numero << endl;
if (! ss.good())
{
cout << "jokin meni pieleen" << endl;
}
}Laitoin noin, niin ei tullut mitään virhettä. :S
if (ss.fail())
{
cout << "jokin meni pieleen" << endl;
}Kiitos vinkistä! Itse tuossa myös huomasin, että se taitaa vissiin olla eof-lippu joka asettuu..
Saman voi tehdä myös tutkimalla >>-operaation paluuarvoa.
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
string merkkijono = "152";
int numero;
istringstream ss(merkkijono);
if ( !(ss >> numero) )
{
cout << "jokin meni pieleen" << endl;
}
else
{
cout << numero << endl;
}
}Jep, tuo TsaTsaTsaan tapa taitaa olla järkevin.
TsaTsaTsaa kirjoitti:
Saman voi tehdä myös tutkimalla >>-operaation paluuarvoa.
... joka on viittaus olioon itseensä. Eihän virta >> a >> b muuten toimisi. Vertailua ei siis tarvitse tehdä >>-operaattorin yhteydessä, vaan seuraava rivi käy aivan hyvin.
Seuraavat koodit tekevät aivan saman asian:
virta >> a >> b;
if (virta.fail()) {}virta >> a >> b;
if (!virta) {}if ((virta >> a >> b).fail()) {}if (!(virta >> a >> b)) {}Käänteiseen tulokseen pääsee ilman huutomerkkiä. Tällöin käytetään virran operaattoria, joka muuttaa sen osoittimeksi (void*), joka taas muuttuu totuusarvoksi.
virta >> a >> b;
if (virta) {}
// if ((void*)virta != 0) {}if (virta >> a >> b) {}Aihe on jo aika vanha, joten et voi enää vastata siihen.