从CString中提取浮点数

时间:2012-08-13 14:01:00

标签: c++ mfc cstring

我想从CString中提取浮点数,格式为:(示例摘录22.760348)

Incidence_angle(inc)[deg]                 :22.760348

基本上我正在阅读包含一些参数的纯文本文件,我想对这些值执行一些计算。我使用CStdioFile对象读取文件,并使用readString方法提取每一行,如下所示:

CStdioFile result(global::resultFile,CFile::modeRead);
while( result.ReadString(tmp) )
            {
                if(tmp.Find(L"Incidence_angle(inc)[deg]") != -1)
                {
                    //extract value of theeta i here
                    // this is probably wrong
                    theeta_i = _tscanf(L"Incidence_angle(inc)[deg]  :%f",&theeta_i);
                }
            }

我尝试使用scanf,因为我无法想到任何其他方式。

如果这个问题看起来非常基本和愚蠢,我很抱歉,但是我已经坚持了很长时间并且会给予一些帮助。

编辑:拿出我写的概念证明程序,造成混乱

4 个答案:

答案 0 :(得分:1)

_tscanf()返回分配的数量,而不是读取的值:

theeta_i = _tscanf(L"Incidence_angle(inc)[deg]  :%f",&theeta_i); 

如果theeta_i成功阅读,则1将包含.0float)。改为:

if (1 == _tscanf(L"Incidence_angle(inc)[deg]  :%f",&theeta_i))
{
    /* One float value successfully read. */
}

从缓冲区读取_stscanf()_tscanf()将等待标准输入的输入。

答案 1 :(得分:1)

假设tmpCString,正确的代码是

CStdioFile result(global::resultFile,CFile::modeRead);
while( result.ReadString(tmp) )
{
if (swscanf_s(tmp, L"Incidence_angle(inc)[deg]  :%f", &theeta_i) == 1)
    {
        // Use the float falue
    }
}

答案 2 :(得分:1)

为什么不使用atof

从链接中获取的示例:

   /* atof example: sine calculator */
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    int main ()
    {
      double n,m;
      double pi=3.1415926535;
      char szInput [256];
      printf ( "Enter degrees: " );
      gets ( szInput );
      n = atof ( szInput );
      m = sin (n*pi/180);
      printf ( "The sine of %f degrees is %f\n" , n, m );
      return 0;
    }

答案 3 :(得分:1)

为什么不完全采用C ++方式呢?

这只是一个暗示:

#include <iostream>
#include <string>
#include <sstream>

int main()
{
   double double_val=0.0;
   std::string dump("");
   std::string oneline("str 123.45 67.89 34.567"); //here I created a string containing floating point numbers
   std::istringstream iss(oneline);
   iss>>dump;//Discard the string stuff before the floating point numbers
   while ( iss >> double_val )
   {
      std::cout << "floating point number is = " << double_val << std::endl;
   }
   return 0;
}

如果您想要使用,只使用cstring,请尝试strtod()来源: man -s 3 strtod