![](/img/trans.png)
[英]How to print a string, which includes special characters and was read from a file? How to print it without special characters?
[英]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.