打印ASCII框不工作
我只是想在控制台中打印一个填充了ASCII框的形状,但输出的只是垃圾文本。这是我的密码:打印ASCII框不工作,c,windows,ascii,mingw32,C,Windows,Ascii,Mingw32,我只是想在控制台中打印一个填充了ASCII框的形状,但输出的只是垃圾文本。这是我的密码: #include <stdio.h> const char shade_block[] = { "▒▒██████▒▒\n\ ▒████████▒\n\ ██████████\n\ ▒████████▒\n\ ▒▒██████▒▒\n\ "}; int main() { printf(shade_block); retu
#include <stdio.h>
const char shade_block[] = {
"▒▒██████▒▒\n\
▒████████▒\n\
██████████\n\
▒████████▒\n\
▒▒██████▒▒\n\
"};
int main()
{
printf(shade_block);
return 0;
}
代码的图片(如果显示不正确)
我在C、CodeLiteIDE、Windows10和MinGW-32中工作。提前谢谢
for(int i = 32; i < 256;i++)
printf("%3d / %02x = %c\n\r", i, i, i);`
这里你有4列版本
for (int i = 32; i < 256; i++)
printf("%3d / %02x = %c%s", i, i, i, ((i >> 2) << 2 == i) ? "\n\r" : "\t");
for(int i=32;i<256;i++)
printf(“%3d/%02x=%c%s”,i,i,i,((i>>2)windows控制台仅使用Unicode(UTF-16编码)用于在控制台中显示文本。如果您以Unicode向控制台传递文本,比如说通过WriteConsoleW
,它将按原样显示。如果您使用ansi版本WriteConsoleA
,您的文本最初将通过调用转换为Unicode,并且作为第一个参数CodePage
将使用从控制台返回的值。默认情况下,将使用控制台OEM代码页。但是您使用ansi编码()。您可以在ansi中打印之前调用。并且您需要使用特定的硬编码代码页值-与编译器在编译源字符串时使用的值完全相同。“▒▒██████▒▒"代码>。在编译代码的同一个窗口上运行时(如果编译器未向您发出警告C4566:通用字符名“\uxxx”表示的字符不能在当前代码页中表示(N))-SetConsoleOutputCP(GetACP())
-将工作,但不同计算机上的ANSI代码页可能不同-因此不能在其他计算机上工作
所以这里有一个很好的解决方案-使用UnicodeL“▒▒██████▒▒“
具有WriteConsoleW
或其他W
函数的字符串。如果您在运行时将字符串设置为多字节字符串,则需要在打印或
调用SetConsoleOutputCP(cp)
其中cp-是字符串中使用的代码页,然后使用A
函数进行输出。
或者(更好)先通过MultiByteToWideChar(cp,*)
将字符串转换为Unicode,然后使用W
函数进行输出尽管RbMm和PeterJ的答案有效,但我使用了StackOVerflow问题中的提示,最终找到了如何在不进行任何字符转义或WriteConsoleW的情况下按原样打印块的方法:
#include <stdio.h>
#include <wchar.h> //For wprintf and wide chars
#include <io.h> //For _setmode
#define U_16 0x20000 //U-16 text mode, for the text blocks
const wchar_t shade_block[] = {
L"▒▒██████▒▒\n"
"▒████████▒\n"
"██████████\n"
"▒████████▒\n"
"▒▒██████▒▒\n"
};
int main()
{
_setmode(_fileno(stdout), U_16); //set the output mode to U_16
wprintf(L"%s\n", shade_block);
return 0;
}
#包括
#包含//用于wprintf和宽字符
#包括//For _setmode
#为文本块定义U_16 0x20000//U-16文本模式
康斯特西哈拉遮荫街区[]={
L“▒▒██████▒▒\n“
"▒████████▒\n“
"██████████\n“
"▒████████▒\n“
"▒▒██████▒▒\n“
};
int main()
{
_setmode(_fileno(stdout),U_16);//将输出模式设置为U_16
wprintf(L“%s\n”,阴影块);
返回0;
}
结果取决于控制台使用的代码页。当您使用ANSI代码页时,通常控制台使用OEM代码页。您需要使用Unicode函数和文本进行正确打印注意,您不应使用\
终止来创建长字符串-查看第二行和后续行上的空格。使用字符串连接:“▒▒██████▒▒\n“▒████████▒\n“██████████\n“▒████████▒\n“▒▒██████▒▒\n“
也处理前导空格。只有空格(代码中的换行,我的注释中的空格)在字符串段之间。反斜杠换行机制在C90之前是必要的,但从那时起就没有了。告诉你代码在运行macOS Sierra的Mac上运行正常可能不是什么安慰。你读过我写的吗?这就是他在表中看到一个字符对应两个字符的原因。他的表中有完全不同的内容,他没有看到hinks@Ryan B在评论之前阅读。你不知道那里发生了什么。我运行了角色测试,出于某种原因,所有内容都显示为同一个角色…例如32/20=╗代码>,33/21=╗代码>,34/22=╗代码>一直到255/ff=╗代码>忘记了另一个我在我的printfI中更改了shade_block
的类型为wchar_t
,在它前面添加了L,并使用了wprintf,现在它什么也不打印。这是我的编译器的问题吗?不。请看我的答案。暂时忘记unicode和w_char。@xaresys我使用WriteConsoleW
,它真的打印了所有这些charasters@Peter为什么我需要忘记unicode?unicode是windows的本机代码,unicode非常完美working@RbMm-冷静下来,给那家伙一个机会,让他第一次“你好,世界”“应用程序。我知道你知道怎么做,但这会让他的大脑一团糟。给他一个机会去理解字符串、指针等。我希望你知道我的意思。”
for (int i = 32; i < 256; i++)
printf("%3d / %02x = %c%s", i, i, i, ((i >> 2) << 2 == i) ? "\n\r" : "\t");
32 / 20 =
33 / 21 = ! 34 / 22 = " 35 / 23 = # 36 / 24 = $
37 / 25 = % 38 / 26 = & 39 / 27 = ' 40 / 28 = (
41 / 29 = ) 42 / 2a = * 43 / 2b = + 44 / 2c = ,
45 / 2d = - 46 / 2e = . 47 / 2f = / 48 / 30 = 0
49 / 31 = 1 50 / 32 = 2 51 / 33 = 3 52 / 34 = 4
53 / 35 = 5 54 / 36 = 6 55 / 37 = 7 56 / 38 = 8
57 / 39 = 9 58 / 3a = : 59 / 3b = ; 60 / 3c = <
61 / 3d = = 62 / 3e = > 63 / 3f = ? 64 / 40 = @
65 / 41 = A 66 / 42 = B 67 / 43 = C 68 / 44 = D
69 / 45 = E 70 / 46 = F 71 / 47 = G 72 / 48 = H
73 / 49 = I 74 / 4a = J 75 / 4b = K 76 / 4c = L
77 / 4d = M 78 / 4e = N 79 / 4f = O 80 / 50 = P
81 / 51 = Q 82 / 52 = R 83 / 53 = S 84 / 54 = T
85 / 55 = U 86 / 56 = V 87 / 57 = W 88 / 58 = X
89 / 59 = Y 90 / 5a = Z 91 / 5b = [ 92 / 5c = \
93 / 5d = ] 94 / 5e = ^ 95 / 5f = _ 96 / 60 = `
97 / 61 = a 98 / 62 = b 99 / 63 = c 100 / 64 = d
101 / 65 = e 102 / 66 = f 103 / 67 = g 104 / 68 = h
105 / 69 = i 106 / 6a = j 107 / 6b = k 108 / 6c = l
109 / 6d = m 110 / 6e = n 111 / 6f = o 112 / 70 = p
113 / 71 = q 114 / 72 = r 115 / 73 = s 116 / 74 = t
117 / 75 = u 118 / 76 = v 119 / 77 = w 120 / 78 = x
121 / 79 = y 122 / 7a = z 123 / 7b = { 124 / 7c = |
125 / 7d = } 126 / 7e = ~ 127 / 7f = 128 / 80 = Ç
129 / 81 = ü 130 / 82 = é 131 / 83 = â 132 / 84 = ä
133 / 85 = à 134 / 86 = å 135 / 87 = ç 136 / 88 = ê
137 / 89 = ë 138 / 8a = è 139 / 8b = ï 140 / 8c = î
141 / 8d = ì 142 / 8e = Ä 143 / 8f = Å 144 / 90 = É
145 / 91 = æ 146 / 92 = Æ 147 / 93 = ô 148 / 94 = ö
149 / 95 = ò 150 / 96 = û 151 / 97 = ù 152 / 98 = ÿ
153 / 99 = Ö 154 / 9a = Ü 155 / 9b = ø 156 / 9c = £
157 / 9d = Ø 158 / 9e = × 159 / 9f = ƒ 160 / a0 = á
161 / a1 = í 162 / a2 = ó 163 / a3 = ú 164 / a4 = ñ
165 / a5 = Ñ 166 / a6 = ª 167 / a7 = º 168 / a8 = ¿
169 / a9 = ® 170 / aa = ¬ 171 / ab = ½ 172 / ac = ¼
173 / ad = ¡ 174 / ae = « 175 / af = » 176 / b0 = ░
177 / b1 = ▒ 178 / b2 = ▓ 179 / b3 = │ 180 / b4 = ┤
181 / b5 = Á 182 / b6 = Â 183 / b7 = À 184 / b8 = ©
185 / b9 = ╣ 186 / ba = ║ 187 / bb = ╗ 188 / bc = ╝
189 / bd = ¢ 190 / be = ¥ 191 / bf = ┐ 192 / c0 = └
193 / c1 = ┴ 194 / c2 = ┬ 195 / c3 = ├ 196 / c4 = ─
197 / c5 = ┼ 198 / c6 = ã 199 / c7 = Ã 200 / c8 = ╚
201 / c9 = ╔ 202 / ca = ╩ 203 / cb = ╦ 204 / cc = ╠
205 / cd = ═ 206 / ce = ╬ 207 / cf = ¤ 208 / d0 = ð
209 / d1 = Ð 210 / d2 = Ê 211 / d3 = Ë 212 / d4 = È
213 / d5 = ı 214 / d6 = Í 215 / d7 = Î 216 / d8 = Ï
217 / d9 = ┘ 218 / da = ┌ 219 / db = █ 220 / dc = ▄
221 / dd = ¦ 222 / de = Ì 223 / df = ▀ 224 / e0 = Ó
225 / e1 = ß 226 / e2 = Ô 227 / e3 = Ò 228 / e4 = õ
229 / e5 = Õ 230 / e6 = µ 231 / e7 = þ 232 / e8 = Þ
233 / e9 = Ú 234 / ea = Û 235 / eb = Ù 236 / ec = ý
237 / ed = Ý 238 / ee = ¯ 239 / ef = ´ 240 / f0 =
241 / f1 = ± 242 / f2 = ‗ 243 / f3 = ¾ 244 / f4 = ¶
245 / f5 = § 246 / f6 = ÷ 247 / f7 = ¸ 248 / f8 = °
249 / f9 = ¨ 250 / fa = · 251 / fb = ¹ 252 / fc = ³
253 / fd = ² 254 / fe = ■ 255 / ff =
#include <stdio.h>
#include <wchar.h> //For wprintf and wide chars
#include <io.h> //For _setmode
#define U_16 0x20000 //U-16 text mode, for the text blocks
const wchar_t shade_block[] = {
L"▒▒██████▒▒\n"
"▒████████▒\n"
"██████████\n"
"▒████████▒\n"
"▒▒██████▒▒\n"
};
int main()
{
_setmode(_fileno(stdout), U_16); //set the output mode to U_16
wprintf(L"%s\n", shade_block);
return 0;
}