C++&引用&燃气轮机&燃气轮机&引用;及<<&引用;IO在C#中?

C++&引用&燃气轮机&燃气轮机&引用;及<<&引用;IO在C#中?,c#,c++,io,C#,C++,Io,有没有提供“>>”和“功能的C#library?没有。您只能使用Console.WriteLine。不过,您可以创建一个提供此功能的包装器。您可以使用Console.WriteLine,Console.ReadLine..来实现此目的。两者都在系统名称空间中。您有System.IO.Stream(Reader | Writer) 对于控制台:console.Write,console.Read不,我不会。C#!=C++ 您应该尽最大努力坚持您所使用的任何语言的语言惯例。我不知道。如果您对链接输出

有没有提供“>>”和“功能的C#library?没有。您只能使用
Console.WriteLine
。不过,您可以创建一个提供此功能的包装器。

您可以使用Console.WriteLine,Console.ReadLine..来实现此目的。两者都在系统名称空间中。

您有System.IO.Stream(Reader | Writer)
对于控制台:console.Write,console.Read

不,我不会。
C#!=C++


您应该尽最大努力坚持您所使用的任何语言的语言惯例。

我不知道。如果您对链接输出感兴趣,可以使用
System.Text.StringBuilder


也许不如C++,但作为另一个海报状态,C>!= c++。< /p> 这在C++中是不可能的,不管你怎么努力:

  • 运算符的左侧和右侧始终按值传递;这排除了
    cin
    的可能性
  • 的右侧是一个整数;这排除了
    cout

  • 第一点是确保运算符重载比C++中稍微凌乱一些(可争论的,但它确实使事情变得简单多了)。,第二点是为了排除C++处理IO、IIRC的

    cin
    cout
    方法。我想我得到了你想要的:简单的、默认格式的输入。我认为没有文本阅读器的原因。ReadXXX()是因为这是解析,而解析很难:例如:应该ReadFloat():

    • 忽略前导空格
    • 需要小数点
    • 需要尾随空格(
      123abc
    • 处理指数(
      12.3a3
      的解析与
      12.4e5
      ?)不同)
    不要提及Heeck确实读读()。从C++,你会期望“读到下一个空白”,但是名字不这样说。 现在,所有这些都有很好的合理答案,我同意C#(或者更确切地说,BCL)应该提供这些答案,但我肯定能理解为什么他们会选择不在中心类上提供脆弱的、几乎不可能正确使用的函数

    编辑: 对于缓冲问题,一个丑陋的解决方案是:

    static class TextReaderEx {
        static public string ReadWord(this TextReader reader) {
            int c;
            // Skip leading whitespace
            while (-1 != (c = reader.Peek()) && char.IsWhiteSpace((char)c)) reader.Read();
            // Read to next whitespace
            var result = new StringBuilder();
            while (-1 != (c = reader.Peek()) && !char.IsWhiteSpace((char)c)) {
                reader.Read();
                result.Append((char)c);
            }
            return result.ToString();
        }
    }
    
    ...
        int.Parse(Console.In.ReadWord())
    

    嗯,Console.Out是一个流;)实际上,您无法创建这样的包装器…我只是尝试了:当重写>运算符时,第二个参数必须是int:S@wwosik字体不,它不是…它是一个TextWriter@Thomas-是的,你是对的,因为它的编程最好是精确的;)尽管TextWriter和控制台流在意思上非常相似g@wwosik:
    TextWriter
    是字符串。
    Stream
    是字节。差别很大。公平地说,Console.WriteLine只不过是写入控制台。outstream。现在看,这是一个我认为C#EPIC失败的地方!C#IO使直接读取二进制值变得很容易,而读取真正的文本有点困难。@Buttink:我不确定你说的是什么意思”难以读取真实文本“.Console.read/Write是文本,因为
    Console.Out
    Console.In
    是文本读取器/写入器。您的意思是难以读取文本int或word?System.IO.File.ReadAllText(“filename.txt”)这不是很糟糕吗?我不知道问题出在哪里。C的方法可能更详细,但它更明智,允许对您正在做的事情进行更精细的控制,并使错误处理更容易。此外,它不是滥用运算符(重写运算符只是为了使IO操作更容易键入是错误的)。好的,您可以先将前两行合并到:var data=Console.ReadLine().split(“”);然后您可以在上面添加ConvertAll()来获取int,但我不知道weel的语法,所以不敢在这里写它。@Will Vousden:“C#可以更好地控制您的操作。”"? 嗯,我不同意…缓冲区?像2GB?”因为Int32不会占用超过100位数字。看来我必须让它>>叹气。。。谢谢你的解释,因为他们可能没有解释。@Buttink:看看-看起来是个不错的起点。
    string input = Console.ReadLine();
    string[] data = input.split( ' ' );
    a = Convert.ToInt32( data[0] );
    b = Convert.ToInt32( data[1] );
    
    StringBuilder builder = new StringBuilder();
    builder.Append("hello").Append(" world!");
    Console.WriteLine(builder.ToString());
    
    static class TextReaderEx {
        static public string ReadWord(this TextReader reader) {
            int c;
            // Skip leading whitespace
            while (-1 != (c = reader.Peek()) && char.IsWhiteSpace((char)c)) reader.Read();
            // Read to next whitespace
            var result = new StringBuilder();
            while (-1 != (c = reader.Peek()) && !char.IsWhiteSpace((char)c)) {
                reader.Read();
                result.Append((char)c);
            }
            return result.ToString();
        }
    }
    
    ...
        int.Parse(Console.In.ReadWord())