繁体   English   中英

从 c 中的文件读取和打印特殊 ascii 字符

[英]Read and print special ascii characters from file in c

我想知道如何从 txt 文件中读取特殊的 ascii 字符。

我有这个文本文件,我想打印:

▄ ▀█   █     █   █▄    █▀
████  █   █  ███    █   ▄███▄ ██▄▄▄ ████▄

这个怎么打印? 当 go 打印它时,我得到错误。 怎么修?

我想为游戏制作主菜单。 我不想直接打印,而是想输入文本文件以获得灵活性。 它应该用第 219 个字符打印出“ASCII BASTILLE DAY”,但它太乱了。 我也尝试使用批处理文件,但它也不起作用。

这是代码:

void mainmenu()
{
    while (1) {
        if (mmplso <= 0) { PlaySound(TEXT("SFX\\VLVce.wav"), NULL, SND_ASYNC); mmplso = 50800; }
        cls();
        hidcur();


        /*
        printf("\n              Made by Mauser\n\n%d\n\n                VER(1.0A)\n\n", mmplso);
        //
        //
        // 
        //
        printf("\n       %c%c%c    %c%c%c  %c%c%c  %c%c%c%c%c %c%c%c%c%c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("      %c   %c  %c    %c   %c   %c     %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("      %c%c%c%c%c   %c%c  %c       %c     %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("      %c   %c %c   %c %c   %c   %c     %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("      %c   %c  %c%c%c   %c%c%c  %c%c%c%c%c %c%c%c%c%c\n\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        //
        printf("%c%c%c%c   %c%c%c    %c%c%c %c%c%c%c%c %c%c%c%c%c %c     %c     %c%c%c%c%c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219,
            (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("%c   %c %c   %c  %c      %c     %c   %c     %c     %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("%c%c%c%c  %c%c%c%c%c   %c%c    %c     %c   %c     %c     %c%c%c%c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("%c   %c %c   %c %c   %c   %c     %c   %c     %c     %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("%c%c%c%c  %c   %c  %c%c%c    %c   %c%c%c%c%c %c%c%c%c%c %c%c%c%c%c %c%c%c%c%c\n\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219), (char)219, (char)219, (char)219, (char)219, (char)219;
        //
        printf("            %c%c%c%c   %c%c%c  %c   %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("            %c   %c %c   %c %c   %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("            %c   %c %c%c%c%c%c  %c %c\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("            %c   %c %c   %c   %c\n", (char)219, (char)219, (char)219, (char)219, (char)219);
        printf("            %c%c%c%c  %c   %c   %c\n\n\n", (char)219, (char)219, (char)219, (char)219, (char)219, (char)219, (char)219);
        //
        */


        printf("PRESS ANY KEY...");
        if (_kbhit()) { PlaySound(TEXT("SFX\\close.wav"), NULL, SND_ASYNC); break; }

        mmplso--;
    }
    system("cls");
}

void mainLoop()
{
    mmplso = 0;
    mainmenu();
    while (1)
    {
        Setup();
        mainGame();
    }
}

int main()
{
    SetConsoleCP(437);
    SetConsoleOutputCP(437);
    mainLoop();
    return 0;
}

```


问题很可能不在于代码,而在于您创建文本文件的方式。 When you copy charters you are using (like ▀█▄) from the web and paste it in the default Windows notepad it's using UTF-8 encoding which is UNICODE and what you need is extended ASCII. 因此,首先我建议您使用notepad++并将新文本文件的代码页手动设置为 OEM 852 之类的内容。在 notepad++ 中,您可以这样做:

编码 > 字符集 > 中欧 > OEM 852

之后,当您将特殊字符粘贴到 notepad++ 中时,文本文件将保存为 ASCII 而不是 UNICODE。

正确创建文本文件后,您可以通过调用 function 将其打印到控制台,如下所示:

void printMyFile(const char *fileName) {
    FILE *file = fopen(fileName, "r");
    fseek(file, 0L, SEEK_END);
    long size = ftell(file);
    fseek(file, 0L, SEEK_SET);
    char *buffer = (char *)calloc(size, sizeof(char));
    fread(buffer, sizeof(char), size, file);
    fclose(file);
    printf(buffer);
    free(buffer);
}

此外,如果您的控制台仍然错误地显示您的字符,您应该包括 Windows.h

#include <Windows.h>

并致电 function

SetConsoleOutputCP(852);

在您将任何内容打印到控制台之前一次。
祝您好运!

编辑 1:我看到您对代码的新编辑,使用 SetConsoleOutputCP(437) 也可以,并且可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM