解析C++ C++的内容
我有以下代码:解析C++ C++的内容,c++,C++,我有以下代码: cout << "Your Value is: "; for ( int x = nStart + 1; x < sBuffer.length(); x++ ) { if ( sBuffer[ x ] == ',' ) { nStart = x; break; }
cout << "Your Value is: ";
for ( int x = nStart + 1; x < sBuffer.length(); x++ )
{
if ( sBuffer[ x ] == ',' )
{
nStart = x;
break;
}
cout << sBuffer[ x ];
}
// setprecision doesnt work right when used with [] but i try anyway..
cout << setprecision(2) << sBuffer[ x ];
我的sBuffer[x]包含一个双精度值,比如4.1415679
我想使用setprecision 2仅显示4.14
我卡住了,我能做什么
它不包含一个double,因为我正在阅读一个文本文件,对不起,我忘了提到它
我的文本文件具有以下格式:
弦,一些弦,49.59494,29.40944
将逗号前的每个字段存储到sBuffer[x]中
所以我确实有一个双人床。我认为它不起作用的原因是编译器将其解释为字符串或字符,而不是双精度值
对吧?
这是我的完整代码,可以在dev或其他软件中编译,但请确保使用以下格式的文本文件:
弦,一些弦,54.2345,34.6654
是的,我知道我可以用一个函数原型来处理过多的循环
但我想先解决这个价值问题。您可能需要:
如果sBuffer是一个字符数组,那么它不包含double。看起来sBuffer是一个字符串或字符数组,所以当您打印sBuffer[x]时,它将其视为一个字符而不是一个浮点数 您需要将数字的字符串表示形式转换为双精度。您可以使用C中的atof或strtod函数,也可以使用boost::lexical_cast。看起来您的sBuffer[x]不会包含一个double,您可以将它与“,”进行比较。那么sBuffer是一个字符缓冲区?那么sBuffer[x]只是4.1415679中的一个字符,如果只输出这个字符,setprecision将不会执行您想要的操作 您可以使用stringstreams从字符串中读取double:
#include <sstream>
istringstream strm("4.1415679");
double d;
if (strm >> d) {
cout << "Your number: " << setprecision(2) << d << endl;
}
else {
cout << "Not a number." << endl;
}
如果安装了这些库总是一个好主意,那么还可以使用boost::lexical_cast…,就像Matthew Crumley说的那样
cout << fixed << setprecision(2) << sBuffer[ x ];
// ^^^^^
#include <sstream>
istringstream strm("4.1415679");
double d;
if (strm >> d) {
cout << "Your number: " << setprecision(2) << d << endl;
}
else {
cout << "Not a number." << endl;
}