【问题标题】:C# Console.ReadLine() never reads input on VSC in LinuxC# Console.ReadLine() 从不读取 Linux 中 VSC 上的输入
【发布时间】:2021-05-17 13:16:00
【问题描述】:

我在有限的for loop 中有一个Console.ReadLine(),它永远不会结束阅读。
我在 Linux Mint 上使用 VS Code。我按 F5 执行。

using System;

class Person
{
    public string Name { get; set;}
    public override string ToString()
    {
        return "My name is " + Name;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int n = 3;
        Person[] p = new Person[n];

        for (int i = 0; i < n; i++)
        {
            p[i] = new Person()
            {
                Name = Console.ReadLine()
            };
            Console.WriteLine("I just read " + p[i]);
        }

        for (int i = 0; i < n; i++)
        {
            Console.WriteLine(p[i].ToString());
        }
    }
}

我希望输入三个名称,然后输出它们。
我通过输入名称然后按 Enter 来输入。
问题是我可以一直输入,Console.WriteLine("I just read " + p[i]); 永远不会被执行。这发生在调试控制台中。

【问题讨论】:

  • 您可能会遇到异常并退出程序。
  • 你能不能在读完这一行之后添加一条消息,或者一个断点,看看它是否真的在读你的输入?
  • @Martheen 在p[i] = new Person(Console.ReadLine()); 之后添加了Console.WriteLine("I just read " + p[i]);,它不输出任何内容。
  • 我认为你应该在终端而不是调试控制台上输入
  • 您是否尝试添加步骤 (string name = Console.ReadLine(); p[i] = new Person{Name = name};)?用断点查看name是否分配正确?

标签: c# linux visual-studio-code


【解决方案1】:

我无法在 Windows 或 Ubuntu 上重现此内容。我的猜测是 Mint 会缓冲输出。

尝试在Console.WriteLine("I just read " + p[i]); 之后添加Console.Out.Flush();

【讨论】:

  • Console.Out.Flush(); 什么都不做。 VSC 终端自行关闭。我很确定问题来自 OmniSharp。我不断收到It was not possible to find any installed .NET SDKs 消息。即使我按照以下说明安装了 dotnet SDKdocs.microsoft.com/en-us/dotnet/core/install/linux-snap。然后我继续github.com/dotnet/core,我发现了许多类似/相同的问题。
  • 你可以使用dotnet run从终端或shell运行程序吗?
  • 是的,我可以。那行得通。刚刚发生了什么 ?我像在 Windows 上一样运行程序,按 F5。
  • 也许从 shell 运行它会构建一个你以前没有的可执行文件。现在,当您按 F5 时,它只会运行可执行文件?也许它是从不工作的 VSCode 内部构建的?
  • 您的问题很可能与您在抱怨找不到 SDK 时遇到的错误有关。如果你运行 dotnet --list-sdks 会输出什么?
【解决方案2】:

这在 Linux 上仍然是一个问题。在调试模式下运行 Visual Studio Code。正在将输出定向到调试控制台,但未考虑输入。

它仅在从命令行运行时有效,但基本上不允许调试。

虽然这个问题的答案就在这里 Debug Console window cannot accept Console.ReadLine() input during debugging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2015-05-19
    • 2021-10-13
    • 2011-04-13
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    相关资源
    最近更新 更多