【问题标题】:Printing text and variables in Windows C++在 Windows C++ 中打印文本和变量
【发布时间】:2012-07-29 02:10:37
【问题描述】:

我目前正在开发一个基于 Windows 的 C++ 程序。我习惯于工作/编码控制台应用程序,所以我不熟悉我正在尝试做的很多事情的语法。所以我以后可能会有更多的问题。

现在,我想打印一些文本并在文本中显示一个变量。 例如,如果我想打印“我是 X 岁”并且 X = 30,那么它的语法将如何形成?

我知道这行得通:

DrawText(hDC,L"I am X years old",-1,&rect,DT_CENTER | DT_WORDBREAK );

我想做的是:

DrawText(hDC,L"I am "+ X +" years old",-1,&rect,DT_CENTER | DT_WORDBREAK );

但这不起作用。那么我该如何正确实现呢?

【问题讨论】:

  • 那么,您将如何使用控制台应用程序来做到这一点? (提示:std::cout 是一个流。)

标签: c++ windows text printing


【解决方案1】:

C++ 不是 Javascript 等无类型语言,因此不能通过将部分相加来构造这样的字符串。相反,您必须使用类似 swprintf_s 的函数自己构建字符串。例如,

wchar_t wchBuf[128];
swprintf_s(wchBuf, _countof(wchBuf), L"I am %ld years old", X);
DrawText(hDC, wchBuf, -1, &rect, DT_CENTER | DT_WORDBREAK);

【讨论】:

  • 不要传大小,使用检测它的模板版本。
  • 我很抱歉,但这是我第一次在这样的窗口中编程。你能解释一下 swprint_s 在做什么吗?你到底在做什么,制作一个字符串?
  • @Avalon-96-since he's not respond..sprintf_s,在 C 中,形成了一个类似于 C++ strcat 的字符串,但 IMO 更好,因为如您所见,他提供了以下格式结果如何。所以,我假设它们是等价的,但在不同的编程领域。
  • @Avalon-96:C/C++ 本身并不支持“字符串”作为不同的数据类型(尽管在 C++ 中有 STL 字符串/wstring 类做得不错,如另一个答案所示以下)。字符串实际上只是一个字符数组。 swprintf_s 函数用您传递给它的格式化参数数组填充提供的缓冲区。 %ld 代码是 swprintf_s 函数的标记,表示“我传递给你的下一个参数是一个整数”。有关更多信息,请参阅 cprogramming.com/tutorial/lesson9.htmlmsdn.microsoft.com/en-us/library/ce3zzk1k(v=vs.80).aspx
【解决方案2】:

字符串文字只是指针,不能将它们加在一起。

但是std::string 对象支持operator+

DrawTextA(hDC,("I am " + itostr(X) + " years old").c_str(),-1,&rect,DT_CENTER | DT_WORDBREAK );

(你可以找到itostr here

当然,也可以使用宽字符和std::wstring 来执行此操作,但对于此示例,坚持使用 ASCII 是最简单的。

【讨论】:

    【解决方案3】:

    看看字符串如何被人为地用来存储文本,使用“int”而不是“string”不是更好吗? 例如 你可以使用: int 年龄 = 30;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多