【问题标题】:Visual Studio MFC Cstring formatVisual Studio MFC Cstring 格式
【发布时间】:2016-04-25 14:51:39
【问题描述】:

我正在使用 Visual Studio 开发 MFC 接口,但输出不是应有的。我使用的代码与代码块中使用的 on 相同,但这里的输出不同,我认为这是因为格式。在我的“IDC_Values”中输入“e”和“d”的正确方法是什么?我在网上搜索但找不到太多关于 MFC 的信息

int e[100], d[100];

CString Text;
Text.Format((LPCWSTR)L"%d \t%d", e, d);
SetDlgItemText(IDC_Values, Text);

【问题讨论】:

  • ed 是数组,因此使用 %d 格式说明符打印它们是错误的。你想达到什么目的?打印数组的第一个元素?打印数组的所有元素?此外,您不需要在格式字符串之前使用 (LPCWSTR) 强制转换。 IDC_Values 是什么?编辑控件的 id,静态的还是...?显示ed 中的值示例以及您要在IDC_Values 中输入的文本(控制IDC_Values 是什么)。
  • 我要打印数组的所有元素
  • IDC_Values 是编辑控件的id
  • 至于 LPCWSTR 演员 -- 从不 演员字符串类型,即使它可能“工作”。如果一个字符串在不应用强制转换的情况下不能独立存在,那么代码可以而且应该被认为是错误的。强制转换表明您正试图让编译器关闭有关不同字符串类型的错误。相反,为作业使用正确类型的字符串。
  • 您需要编写一个循环来打印数组的所有值。即便如此,Format 怎么知道如何格式化一系列数字?中间有空格?两个空格?回车?管道符号?

标签: c++ mfc


【解决方案1】:

CString 在 UNICODE 构建上是 CStringW,在非 UNICODE 构建上是 CStringA。所以你不应该将宽文字与非宽文字混合,例如你有:

Text.Format((LPCWSTR)L"%d \t%d", e, d);
                     ^ ~~~~ this requires that CString is wide

这应该是(减去 e 和 d 是数组的事实!!):

Text.Format(_T("%d \t%d"), e, d);

现在如果你想格式化一个字符串,并将它设置为小部件,那么你必须迭代它(警告:我没有编译这段代码):

CString Text;
CString tmp;
for (size_t i = 0; i < sizeof(e)/sizeof(e[0]); ++i) {
  tmp.Format(_T("%d,"), e[i]);
  Text += tmp;
}

// here the same for d

我并不是说这是最有效的方式。

【讨论】:

    【解决方案2】:

    如果要打印数组的内容,则必须迭代数组并构建字符串 我猜你想要一个包含 e[] 和 d[] 的行和列的列表? 我假设 e。 d 被完全填满。 如果是这样,您需要编码 喜欢

    int e[100], d[100];
    CString Text;
    CString Line
    for(int i=0;i<100;i++){
        Line.Format((LPCWSTR)L"%d \t%d\r\n", e, d);
        Text+=Line;
    }
    SetDlgItemText(IDC_Values, Text);
    

    这将生成一个包含 e 和 d 值的多行字符串。 如果这是你想要的。

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 2013-10-26
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多