0

次のようにフォーマットされた CString から浮動小数点数を抽出したい: (extract 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

であると仮定すると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 に答える
1

_tscanf()読み取った値ではなく、行われた割り当ての数を返します。

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

aが正常に読み取られた場合、 ( )theeta_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 に答える