C 练习实例7
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
程序分析:字符共有256个。不同字符,图形不一样。
VC6.0下出现中文乱码(原因+解决方法):
176的16进制是B0,219的16进制是DB,0xB0DB是"佰"字的内码,所以输出的就是"佰"了。
主要原因是文件信息的代码页不同,我们所使用的操作系统中文状态下的代码页,要显示扩展的ASCII码需要在437 OEM-美国这个下面显示,这样就可以显示出你所希望的。具体修改控制台的默认代码页步骤如下:
- 1.点击运行界面左上角标题栏图标【c:\】,选择默认值一项
- 2.修改默认代码页,936(ANSI/OEM-简体中文GBK)为437 OEM-美国
- 3、关闭后重新运行一下即可
实例
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include<stdio.h>
int main()
{
char a=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
return 0;
}
以上实例输出结果为:
C 语言经典100例
小智
222***1705@qq.com
参考方法:
#include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { int i,j; SetConsoleOutputCP(437); char a=176,b=219; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(i==j||(i+j+1)==5) printf("%c",b); else printf("%c%c",a,a); } printf("\n"); } }小智
222***1705@qq.com
大宅院里的三表哥
gul***r@outlook.com
# Linux环境下可尝试使用字符'█'(utf-8:9608)、'▒'(utf-8:9618)替代例程中的字符:
#include <stdio.h> #define LEN 5 int main() { int i, j; char *gray_block = "█", // utf-8字符:9608 *textured_block = "▒"; // utf-8字符:9618 for(i=0; i<LEN; i++) // 行循环 { for(j=0; j<LEN; j++) // 列循环 if(i==j || i+j==LEN-1) printf("%s", gray_block); else printf("%s", textured_block); putchar('\n'); // 换行 } return 0; }# 终端运行截图:
# 或尝试临时改变编码方式(修改LANG值为IBM437,未成功),可参考以下博文:
1. [解决Linux终端乱码的两则例子](https://www.cnblogs.com/hyang0/p/6397331.html)
2. [Linux默认字符编码为UTF-8,如出现乱码可设置为GBK](https://www.cnblogs.com/Kconnie/p/5418278.html)
3. [Linux下字符集的安装](https://www.cnblogs.com/jjzd/p/6861995.html)
大宅院里的三表哥
gul***r@outlook.com
ENE
mae***a@163.com
与其修改编码,不如拥抱 UTF-8,可以使用预处理器功能,使代码能在 win 和 linux 上编译运行
通过 ifdef 查询宏是否定义判断编译平台。
#include<stdio.h> #define LEN 5 void print_x(char *highlight_text, char *generic_text); #ifdef _WIN32 // 判断是不是win32位,64位一般包含这个宏 #include <Windows.h> int main(){ // 终端编码设置为UTF-8 SetConsoleOutputCP(65001); print_x("█", "▒"); system("pause"); return 0; } #elif __linux__ // 判断是不是Linux int main(){ print_x("█", "▒"); return 0; } #endif void print_x(char *highlight_text, char *generic_text){ for (int i = 0; i < LEN; i++){ for (int j = 0; j < LEN; j++){ if (i == j || i + j == LEN - 1){ printf("%s", highlight_text); } else { printf("%s", generic_text); } } printf("\n"); } }ENE
mae***a@163.com