getcahr()函数究竟该怎样用,怎样运行的(语言-c#)

一个统计空格、制表符、换行符的代码:

img


为啥不能写成这样:

img


前者能够正常运行,为啥后者无法输出·正确结果。

你那样写,每次循环读取了4个字符
而实际上,你一个字符需要4次判断,首先判断是否为结束,然后判断是否为空格,是否为制表、是否为换行。
你那么写,判断完之后,没有继续判断,而是又去读了下一个字符

写成这样每次循环都会少比较4个不同的字符,而不是每个字符比较四次,每次调用getchar都会获取当前的然后指针后移准备获取下一个

【以下回答由 GPT 生成】

原因是在C#中,Console.ReadKey().KeyChar会读取一个字符,并返回该字符的ASCII值。 ASCII值和字符是不同的。在C#中,字符由两个字节表示,即16位。因此,对于空格、制表符和换行符等特殊字符,ASCII值与该字符本身不同。

在第二段代码中,将ch声明为char类型并使用Console.ReadKey().KeyChar来获取输入的字符,这将导致与预期不符的结果。Console.ReadKey().KeyChar返回的是ASCII值,而不是字符本身。因此,条件判断失效,导致无法正确统计空格、制表符和换行符的数量。

为了解决这个问题,可以使用Console.ReadKey().KeyConsoleKey来表示输入的字符。下面是修改后的代码:

using System;

class Program {
    static void Main(string[] args) {
        Console.WriteLine("请输入一段文本:");

        int spaceCount = 0, tabCount = 0, newlineCount = 0;

        while (true) {
            ConsoleKeyInfo keyInfo = Console.ReadKey();
            char ch = keyInfo.KeyChar;

            if (ch == ' ')
                spaceCount++;
            else if (ch == '\t')
                tabCount++;
            else if (ch == '\n')
                newlineCount++;

            if (keyInfo.Key == ConsoleKey.Enter)
                break;
        }

        Console.WriteLine("统计结果:");
        Console.WriteLine("空格数量:" + spaceCount);
        Console.WriteLine("制表符数量:" + tabCount);
        Console.WriteLine("换行符数量:" + newlineCount);
    }
}

在这段修改后的代码中,我们使用ConsoleKeyInfo来获取输入字符的信息,并通过keyInfo.KeyChar获得字符的值。而要检查特殊字符,我们使用keyInfo.KeyConsoleKey.Enter对比。这样就可以正确统计空格、制表符和换行符的数量。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^