4

当我调试这个控制台应用程序时,它给出了一个奇怪的结果。显然我忽略了一些东西。

class Program
{
    static void Main(string[] args)
    {
        int ops = int.Parse(Console.ReadLine());           
        int inte = 0;
        StringBuilder roll = new StringBuilder();

        Operations(roll, inte, ops);
    }

    static void Operations(StringBuilder roll, int inte, int ops)
    {
        for (int i = 0; i < ops; i++)
        {
            roll.AppendLine(Console.ReadLine()); 

            inte = roll.ToString().IndexOf("^");

            if (inte == i)
                roll.Remove(i, 1);


            if (roll.ToString().IndexOf("!") == i)
                roll.Remove(i, 1);              
        }

        Console.WriteLine(roll.ToString());
        Console.ReadLine();
    }
}

对于输入,为第一个输入(整数“inte”)输入“3”,为其他 3 个 ReadLine 条目输入“^A”、“^B”、“^D”。在循环的第一次迭代中,它将按预期删除 ^。但是在第二次迭代(i =1)中,它读取 inte 为 3。但它应该是 1,因为在第二轮中,Stringbuilder 已将“^B”附加到 A,所以它现在是“A^B”。当输入字符串生成器正在附加字符串时,我正在尝试删除“^”(和“!”)。为什么“inte”整数在第二轮读取为 3?

4

1 回答 1

8

这是你的问题:

roll.AppendLine(Console.ReadLine());

您正在使用AppendLine,因此在第一次迭代中,它附加了“^A”,然后是回车符 ( '\r') 和换行符 ( '\n')。删除第一个字符后,字符串中仍有 3 个字符。('A''\r') '\n'^B\r\n" in the second iteration, you find the这就是为什么在索引 3 而不是索引 1 处附加^` 之后的原因。

只需将其更改为:

roll.Append(Console.ReadLine());

我怀疑你会得到你期望的结果。

于 2013-09-13T14:37:32.900 回答