You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中读取控制台输入直到遇到空格或回车

实现C#中类似C++ std::cin的输入读取方式

嘿,我刚学C#的时候也纠结过这个问题!要实现像C++里std::cin那样——不管输入是空格分隔还是换行分隔,都能逐个读取独立的输入项(比如输入a b c不管是一行输入还是分三行输入,结果都能读到a、b、c这三个项),其实有几种实用的方法,我给你详细说说:

方法1:读取行并拆分(简单快捷)

这种方法适合大多数场景,核心思路是先读取所有输入行,再把每行内容按空白字符(空格、换行、回车)拆分,最后收集所有非空的输入项。

代码示例:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> inputItems = new List<string>();
        string currentLine;
        
        // 循环读取每一行输入,直到输入结束(比如按Ctrl+Z)
        while ((currentLine = Console.ReadLine()) != null)
        {
            // 拆分当前行,按所有空白字符分割,同时移除空字符串(避免多个空格导致的空项)
            string[] lineItems = currentLine.Split(
                new[] {' ', '\t', '\n', '\r'}, 
                StringSplitOptions.RemoveEmptyEntries
            );
            inputItems.AddRange(lineItems);
        }

        // 遍历输出所有读取到的项,和std::cin效果一致
        foreach (string item in inputItems)
        {
            Console.WriteLine($"读取到输入项:{item}");
        }
    }
}

方法2:手动逐字符读取(灵活可控)

如果你需要更实时的逐词读取(比如输入一个词就处理一个,不用等整行输入完),可以手动读取每个字符,跳过空白字符,直到遇到下一个空白字符时返回当前单词。这种方式更贴近std::cin的底层逻辑。

代码示例:

using System;
using System.Text;

class Program
{
    static void Main()
    {
        string word;
        // 循环读取单词,直到输入结束
        while ((word = ReadNextWord()) != null)
        {
            Console.WriteLine($"读取到单词:{word}");
        }
    }

    // 自定义方法:读取下一个非空白字符组成的单词
    static string ReadNextWord()
    {
        StringBuilder wordBuilder = new StringBuilder();
        int charCode;

        // 先跳过开头的所有空白字符(空格、换行、回车等)
        while ((charCode = Console.Read()) != -1 && char.IsWhiteSpace((char)charCode))
        {
            // 什么都不做,只是跳过空白
        }

        // 如果读取到输入结束(比如Ctrl+Z),返回null
        if (charCode == -1)
            return null;

        // 开始读取字符,直到遇到空白字符或输入结束
        do
        {
            wordBuilder.Append((char)charCode);
            charCode = Console.Read();
        } while (charCode != -1 && !char.IsWhiteSpace((char)charCode));

        return wordBuilder.ToString();
    }
}

小提示

  • 第一种方法代码简洁,适合一次性处理所有输入的场景;
  • 第二种方法能实时处理每个输入项,适合需要边输入边处理的情况;
  • 两种方法都能处理任意空白分隔的输入,不管是空格、换行还是制表符,效果和std::cin完全一致。

内容的提问来源于stack exchange,提问作者Vesk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:05:13