我想从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,因为我无法想到任何其他方式。
如果这个问题看起来非常基本和愚蠢,我很抱歉,但是我已经坚持了很长时间并且会给予一些帮助。
编辑:拿出我写的概念证明程序,造成混乱
答案 0 :(得分:1)
_tscanf()
返回分配的数量,而不是读取的值:
theeta_i = _tscanf(L"Incidence_angle(inc)[deg] :%f",&theeta_i);
如果theeta_i
成功阅读,则1
将包含.0
(float
)。改为:
if (1 == _tscanf(L"Incidence_angle(inc)[deg] :%f",&theeta_i))
{
/* One float value successfully read. */
}
从缓冲区读取_stscanf()
,_tscanf()
将等待标准输入的输入。
答案 1 :(得分:1)
假设tmp
是CString
,正确的代码是
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