【问题标题】:Complex I/O using Console.WriteLine() [duplicate]使用 Console.WriteLine() 的复杂 I/O [重复]
【发布时间】:2015-01-08 01:01:17
【问题描述】:

在仅使用 C++ 工作多年后,我目前正在自学 C#。不用说,我需要重新学习很多东西。我的问题如下:

在 Windows 控制台应用程序中打印(写入控制台窗口)涉及多个变量、文本字符串和换行符的复杂信息的最佳方法是什么?

更清楚地说,我如何将类似于以下 C++ 代码的内容翻译成 C#:

int x = 1; int y = 2; double a = 5.4;

cout << "I have " << x << " item(s), and need you to give" << endl
     << "me " << y << " item(s). This will cost you " << a << endl
     << "units." << endl;

在 C++ 中,这会将以下内容打印到控制台:

我有 1 件物品,需要您提供

给我 2 件物品。这将花费你 5.4

单位。

这个例子完全是随意的,但我的程序中经常有像这样的简短而复杂的消息。我是否完全需要重新学习如何格式化输出,或者在 C# 中是否有我还没有找到的类似功能(我已经挖掘了很多 Console.IO 文档)。

【问题讨论】:

  • 在 C# 中确实没有直接等效于 out &lt;&lt; 运算符。 String.Format/Console.Write/Console.WriteLine 更像是printf 替换,但它是.Net 中一直使用的格式输出(如果需要,您确实可以自定义格式),如 MSDN 中所述,重复问题,或格兰特温尼的回答。
  • 与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?。此外,它是“提前致谢”,而不是“致谢”。

标签: c# c++ io console.writeline


【解决方案1】:

您可以在写出到控制台的字符串中指定占位符,然后提供值来替换这些占位符,如下所示:

Console.WriteLine("I have {0} item(s), and need you to give\r\n" +
                  "me {1} item(s). This will cost you {2} \r\nunits.", x, y, a);

我认为为了可读性,我将其分开:

Console.WriteLine("I have {0} item(s), and need you to give", x);
Console.WriteLine("me {0} item(s). This will cost you {1} ", y, a);
Console.WriteLine("units.");

正如 BradleyDotNet 所指出的,Console.WriteLine() 方法并不能直接发挥作用。它调用String.Format,而后者又使用StringBuilder.AppendFormat

如果想了解内部情况,可以check out the source code here

【讨论】:

  • 请注意,在内部,这是按照 Borgleader 的建议使用 String.Format
  • 不要忘记文件顶部需要using System;
  • 谢谢!这需要一些时间来适应,但这是一个好的开始。抱歉,顺便说一句可能重复。
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2014-05-27
  • 2011-06-20
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多