为什么我的foreach打印出2个char?

时间:2015-07-22 17:12:28

标签: c# foreach output

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

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中使用它,则应输出< / p>

t 
e
s
t

但无论出于什么原因,我都会得到像这样的输出

t
es
t

我不明白为什么。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

您需要在Console.Read()功能中将Console.ReadLine()更改为encryptConsole.Read()仅从输入流中读取下一个字符。由于按下回车键会生成两个字符:\r\n,它会循环两次。

答案 2 :(得分:1)

在encrypt方法中 - 将Console.Write更改为Console.WriteLine并将Console.Read()移到foreach之外。

        setTimeout(function(){  


        var lastScroll = 0;
        $("#__xmlview0--players-vsb-sb").scroll(function () {
                var st = $(this).scrollTop();
                if (st > lastScroll) {
                    console.log("scrolling down");
                } else {
                    console.log("scrolling up");
                }
                lastScroll = st;
            });
}, 700);

答案 3 :(得分:0)

使用Console.ReadLine()代替Console.Read() - 或者(更好)消除完全读取的行并使用Console.WriteLine(otherword)Read()会弄清楚下一行的格式化方式。