使用istringstream提取?

时间:2013-01-03 11:41:17

标签: c++

我有以下内容:

char op; double x, y, z;
istringstream iss("v 1.0 2.0 3.0", istringstream::in);
iss>>op>>x>>y>>z;

但是在输出x,y和z的值时,它们都返回0?

更新

我猜它现在正在运行,但我输出的是:

int length=wsprintf(result," V is %d, %d, %d ", x, y, z);
TextOut(hdc,0,0,result,length);

并且它没有显示正确的值。

但是,如果值为int,则可以正常工作,例如:

char op; int x, y, z;
istringstream iss("v 1 2 3", istringstream::in);
iss>>op>>x>>y>>z;

2 个答案:

答案 0 :(得分:1)

%d格式说明符需要int,但xyz的类型为double。如果类型和格式说明符不匹配,则行为未定义。请注意wsprintf的参考页面,double似乎没有任何格式说明符。

建议使用std::wostringstreamstd::wstring代替:

std::wostringstream ws;
ws << L" V is " << x << L"," << y << L"," << z;
const std::wstring result(ws.str());
TextOut(hdc,0,0,result.c_str(), result.length());

答案 1 :(得分:0)

谢谢hmjd。

对于其他任何人来说,这就是我正确输出值的方法。

int length=sprintf_s(result," V is %0.1f, %0.1f, %0.1f ", x, y, z);
TextOut(hdc,0,0,result,length);

一般语法“%A.B”表示小数点前后的数字&amp;小数点后的B位数。

谢谢大家。