我有以下内容:
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;
答案 0 :(得分:1)
%d
格式说明符需要int
,但x
,y
和z
的类型为double
。如果类型和格式说明符不匹配,则行为未定义。请注意wsprintf
的参考页面,double
似乎没有任何格式说明符。
建议使用std::wostringstream
和std::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位数。
谢谢大家。