为什么我的每个打印2个字符

本文关键字:2个 字符 打印 我的 为什么 | 更新日期: 2023-09-27 18:03:59

我正在尝试创建一个用于教育的加密(ceasar),由于某种原因,我似乎无法理解为什么我的简单代码(到目前为止)会造成这样的混乱

static void Main(string[] args)
    {
        string word;
        int key = 0;
        Console.WriteLine("Write your messages");
        word = Console.ReadLine();
        Console.WriteLine("Enter your key cypher");
        key =int.Parse(Console.ReadLine());
        encrypt(word, key);
    }
    static void encrypt(string message, int key)
    {
        foreach (char otherword in message)
        {
            Console.Write(otherword);
            Console.Read();
        }
    }

如果我在"写你的消息"之后写测试,然后把它放在我的string word中,并在我的函数encrypt中使用它,它应该输出

t 
e
s
t

但是不管什么原因,我得到这样的输出

t
es
t

我不明白为什么

为什么我的每个打印2个字符

您可能想要使用Console.WriteLine(otherword);。输出中换行符的间距取决于您在Console.Read();行之后按哪个键。(例如,如果您按下[Enter],那么您将得到一个换行符,但如果您按下A,则不会。)

您可能还应该使用Console.ReadKey(true);而不是Console.Read();作为分隔输出的方法,因为这将使您按下的键不会显示出来。

您需要在encrypt函数中将Console.Read()更改为Console.ReadLine()Console.Read()只从输入流中读取下一个字符。由于按enter键生成两个字符:'r'n,因此它循环两次。

在加密方法中-更改控制台。写入控制台。WriteLine并将Console.Read()移出foreach.

    static void encrypt(string message, int key)
    {
        foreach (char otherword in message)
        {
            Console.WriteLine(otherword);
        }
        Console.Read();
    }

使用Console.ReadLine()代替Console.Read() -或者(甚至更好)完全消除行读取并使用Console.WriteLine(otherword)Read()会干扰下一行的格式