Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析C++ C++的内容_C++ - Fatal编程技术网

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