如何在C(Windows)中打印方框字符 [英] How to Print Box Characters in C (Windows)
本文介绍了如何在C(Windows)中打印方框字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用C打印破折号?
其中之一:-
每当我这样做时:printf("—")
我只是在终端中收到ù
。
谢谢。
编辑:下面的代码应该打印出一个带有横线的xs和os网格。
int main ()
{
char grid[3][3] = {{'a', 'a', 'a'}, {'a', 'a', 'a'}, {'a', 'a', 'a'}};
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (j != 0)
{
printf("|");
}
printf(" %c ", grid[i][j]);
}
if (i != 2)
{
printf("
——————————————
");
}
}
return 0;
}
输出:(""应为"-"s)
a | a | a
ùùùùùùùùùùùù
a | a | a
ùùùùùùùùùùùù
a | a | a
编辑:我在Windows 10 x64上使用代码块16.01和C11。
编辑:我被告知有方框字符,问题变成了如何打印这些字符,因此更改了标题和标签。
推荐答案
在标准C中,您使用宽字符和宽字符串:
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_ALL, "");
fwide(stdout, 1);
wprintf(L"🞨🞩🞪🞫🞬🞭🞮 🞉🞈🞇🞆🞅
");
wprintf(L" │ │
");
wprintf(L"───┼───┼───
");
wprintf(L" │ │
");
wprintf(L"───┼───┼───
");
wprintf(L" │ │
");
return EXIT_SUCCESS;
}
您可以使用像L'┼'
这样的宽字符常量;printf()
和wprintf()
函数的转换说明符是%lc
。同样,宽字符串常量具有L
前缀,其转换说明符为%ls
。
遗憾的是,您只能使用Microsoft提供的损坏版本的C,因此它可能适用于您,也可能不适用。
上述代码不能在Windows中运行,因为Microsoft不希望它运行。有关详细信息,请参阅setlocale()上的Microsoft文档:
可用区域设置名称、语言、国家/地区代码和代码页的集合包括Windows NLS API支持的所有区域设置名称、语言、国家/地区代码和代码页,但每个字符需要两个以上字节的代码页除外,例如UTF-7和UTF-8。
换句话说,Microsoft的C本地化仅限于单字节代码页,并明确排除了任何Unicode区域设置。然而,这纯粹是微软EEE战略的一部分,目的是将你这个初出茅庐的开发人员束缚在微软自己的围墙花园里,这样你就不会编写真正的可移植C代码(或者,可怕的是,利用你自己的POSIX C),而是在心理上被锁定在微软模型中。您知道,您可以使用_setmode()启用Unicode输出。
因为我自己根本不使用Windows,所以我无法验证以下特定于Windows的解决方法是否真的有效,但它值得一试。(请Windows用户在评论中报告您的发现,这样我就可以修正/包括此答案的这一部分。)
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
static int set_wide_stream(FILE *stream)
{
return _setmode(_fileno(stream), _O_U16TEXT);
}
#else
static int set_wide_stream(FILE *stream)
{
return fwide(stream, 1);
}
#endif
int main(void)
{
setlocale(LC_ALL, "");
/* After this call, you must use wprintf(),
fwprintf(), fputws(), putwc(), fputwc()
-- i.e. only wide print/scan functions
with this stream.
You can print a narrow string using e.g.
wprintf(L"%s
", "Hello, world!");
*/
set_wide_stream(stdout, 1);
/* These may not work in Windows, because
the code points are 0x1F785 .. 0x1F7AE
and Windows is probably limited to
Unicode 0x0000 .. 0xFFFF */
wprintf(L"🞨🞩🞪🞫🞬🞭🞮 🞉🞈🞇🞆🞅
");
/* These are from the Box Drawing Unicode block,
U+2500 ─, U+2502 │, and U+253C ┼,
and should work everywhere. */
wprintf(L" │ │
");
wprintf(L"───┼───┼───
");
wprintf(L" │ │
");
wprintf(L"───┼───┼───
");
wprintf(L" │ │
");
return EXIT_SUCCESS;
}
这篇关于如何在C(Windows)中打印方框字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文