Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c++ istringstream

jeepatijee [05.01.2009 12:59:59]

#

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;
	}
}

vehkis91 [05.01.2009 13:11:57]

#

Laitoin noin, niin ei tullut mitään virhettä. :S

if (ss.fail())
{
    cout << "jokin meni pieleen" << endl;
}

jeepatijee [05.01.2009 13:19:13]

#

Kiitos vinkistä! Itse tuossa myös huomasin, että se taitaa vissiin olla eof-lippu joka asettuu..

TsaTsaTsaa [05.01.2009 14:42:42]

#

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;
	}
}

vehkis91 [05.01.2009 14:44:01]

#

Jep, tuo TsaTsaTsaan tapa taitaa olla järkevin.

Metabolix [05.01.2009 16:34:21]

#

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) {}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta