当至少一个Edit字段具有小数值时,DDX_Text会解析错误的值

时间:2016-12-16 15:40:39

标签: c++ mfc

我正在处理MFC应用程序。我有一个带有一些编辑控件盒的CFormView。我直接将它们的值映射到类Setpoint的对象内的变量。

typedef struct {
    float fAmplitud;
    float fFase;
} fasor;

class Setpoint {
    public:
        Setpoint() {
          oV1 = oV2 = oV3 = { 0 };  
        }
    public:
        fasor oV1;
        fasor oV2;
        fasor oV3;
};

要阅读其值,请使用UpdateData(TRUE)DoDataExchange看起来像这样:

void View_Control::DoDataExchange(CDataExchange* pDX){
  CFormView::DoDataExchange(pDX);
  DDX_Text(pDX, IDC_EDIT1, m_oSetpoint.oV1.fAmplitud);
  DDX_Text(pDX, IDC_EDIT3, m_oSetpoint.oV2.fAmplitud);
  DDX_Text(pDX, IDC_EDIT5, m_oSetpoint.oV3.fAmplitud);
};

有些事情看起来像一个bug,而且就是这样:只要所有用户输入都保持整数,一切正常。

如果至少有一个数字有一个小数部分,比如说IDC_EDIT1是1.5,那么每个小数部分的其他框也可以正常工作(即使它是1.00)。每个没有小数部分的框都会被解析错误。

例如,如果我输入:IDC_EDIT1中的10,IDC_EDIT3中的1和IDC_EDIT5中的0,我会得到值10.001.000.00

另一方面,如果我输入:IDC_EDIT1中的10.1,IDC_EDIT3中的0和IDC_EDIT5中的0,我会得到值10.10,{{1} },0.10

发生了什么?

更新: 0.10 _sntscanf_s内的DDX_Text似乎存在问题。link。一种解决方法是编辑源代码并将_sntscanf_s替换为sscanf_s,但出于某种原因,我无法在VS2015中看到源代码。

0 个答案:

没有答案