0

我想从格式化为的 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

4 回答 4

1

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

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

如果 a被成功读取,sotheeta_i将包含1( )。改成:.0float

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

那应该是_stscanf()从缓冲区读取,_tscanf()将等待来自标准输入的输入。

于 2012-08-13T14:07:22.300 回答
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
    }
}
于 2012-08-13T14:11:29.867 回答
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;
    }
于 2012-08-13T14:12:28.237 回答
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

于 2012-08-13T14:18:23.927 回答