【问题标题】:print ASCII char on the console in C#在 C# 的控制台上打印 ASCII 字符
【发布时间】:2015-12-17 07:12:39
【问题描述】:

我需要让控制台打印 ASCII 字符,每个“页面”有 22 个字符。通过输入,比如“key”,他们将打印接下来的 22 个 ASCII 字符,依此类推。问题在于“翻页”问题。

这是我的代码:

    static void Main(string[] args)
    {

        int i = 0;

        while (i <= 22)
        {
            Console.Write(i + " = " + (char)i);

            if (i < 22)
            {
                Console.Write((char)10);
            }

            i++;
        }

        Console.Write("Please press any key to turn page");

        Console.ReadKey();

        while (i > 22 && i <= 44)
        {
            Console.Write(i + " = " + (char)i);

            if (i < 44)
            {
                Console.Write((char)10);
            }

            i++;
        }

        Console.Write("Please press any key to turn page");

        Console.ReadKey();
    }

我本质上是一个新手。大部分东西我都是自己学的,所以如果我学业受不了,请多多包涵,告诉我是怎么做到的。我可以从那里过去。提前致谢。

【问题讨论】:

  • 您所面临的“翻页”问题究竟是什么?预期的行为是什么?出了什么问题?
  • 您认为(char) i 对所有低于 32 的控制字符意味着什么?目前尚不清楚您要达到的目标。
  • 检查您的讲义 - 您可能会使用代码控制语句。可以作为答案添加的看起来合理的代码不太可能让你通过分数。
  • 你可以clear控制台,但这并不是真正的“翻页”。
  • 如果你想打印到控制台,你必须准备好一些东西。控制台必须使用程序所使用的字符集/编码。它还必须选择包含要打印的字符的字体。也就是说,您可能希望将C0 Controls 打印为Control Pictures。通过将 0x2400 添加到 char 以实现 0 到 31 的范围。输出(在浏览器中的外观会有所不同):␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘ ␙␚␛␜␝␞␟

标签: c# console ascii


【解决方案1】:

如果您不使用System.Text.Encoding.GetEncoding(28591);,控制台将为某些 ASCII 字符提供不同的符号或不正确的字体。更多关于GetEncoding(28591)的信息

/*internal const int ISO_8859_1 = 28591;// Latin1;*/

using System;

namespace AsciiChart
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.GetEncoding(28591);
            for (int i = 0; i < 256; i++) {
                Console.Write(i+"=> ["+(char)i +"]  \n");
            }
            Console.ReadKey();
        }
    }
}

已编辑: 为了更好的格式,我用这个编辑了源代码。

 Console.Write(" "+(char)i );
   if (i % 16 == 0) { // 16*16 = 256
     Console.Write("\n");
 }

【讨论】:

    【解决方案2】:

    据我所知,您正在尝试按 22 个字符的部分打印所有 ASCII 表。

    这基本上可以通过这段代码sn-p来完成:

    for (int i = 1; i < 256; i++)
    {
        Console.WriteLine(i + " = " + (char)i);
    
        if (i % 22 == 0)
        {
            Console.WriteLine("Please press any key to turn page");
            Console.ReadKey();
            Console.Clear();
        }
    }
    

    这里我们遍历 ASCII 表中的所有 255 个字符,逐行写入。

    在打印出每个字符后,我们会检查它是否是第 22 个字符(i % 22 表示“从 i 中除以 22 的余数” - 因此在 22、44、66 等上它将为 0)。

    如果是 22、44、66 等字符 - 我们正在打印“按任意键”,读取输入,然后清除屏幕。

    就是这样。

    【讨论】:

    • ASCII 是 7 位(0 到 127)。
    • @Corak 从历史上看是这样。但是很多年都是8位的,技术上7位的版本叫做US-ASCII。
    • @Andy:ASCII 从来都不是 8 位的。许多(尽管不是全部)8 位代码页与 ASCII 共享前 128 个字符,不了解的人有时将其称为“扩展 ASCII”。 US-ASCII 只是编码的 IANA 和 MIME 名称。
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2018-08-22
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多