用C语言的<wchar.h>宽字节库实现好玩的逐字输出效果(模拟打字)
笔者闲来无聊,遂突发奇想试试用C语言实现逐字输出的效果,接下来讲解实现方法
(震惊!!!中日英三语可以混着写且正确统计字符数)
其实是使用了宽字节库wchar.h
#include <stdio.h> #include <wchar.h> #include <locale.h> //本地化库 int main() { setlocale(LC_ALL, ""); //使用系统默认本地化 wchar_t str[] ={ L"Hello你好我是人我来自地球おはようございます先輩"}; int len=wcslen(str); wprintf(L"%ls\n", str); printf("%d",len); return 0; }我这里使用的是gcc编译器,编译时使用命令:
gcc -finput-charset=UTF-8 -fexec-charset=GBK -o main main.c
然后.\main运行程序,结果如下
可以看到输出结果和字符数都是正确的
然后,又因为Windows.h库的Sleep函数可以实现延时效果
所以我们可以开始搞事情了:
#include <stdio.h> #include <wchar.h> #include <locale.h> #include <windows.h> //首先实现一个间隔逐字输出字符的函数 /* *params: *lines[]:一个宽字节字符串二维数组 *lines_len:要输出的行数 *delay_time:要间隔的时间(ms) */ void printLines(wchar_t *lines[], int lines_len, int delay_time) { int line_len = 6, i = 0; setlocale(LC_ALL, ""); //本地化 for (int line = 0; line < lines_len; line++) //先一行一行读取 { wchar_t *currentline = lines[line]; //存放当前行 wchar_t s[256] = L""; //存放已经读取的字符 int len = wcslen(currentline); //获得当前按行的字符数 int display_len = 0; //指向输出字符串的各个字符位置的指针 for (i = 0; i < len; i++) { s[display_len] = currentline[i]; display_len++; s[display_len] = L'\0'; wprintf(L"\r%ls", s); //输出字符串 Sleep(delay_time); } } } //主函数 int main(){ //定于一个宽字节字符串二维数组 wchar_t *wstr[]={ L"未熟 無ジョウ されど 美しくあれ\n", //若要换行则在句尾加上换行符 L"No Destiny ふさわしく無い\n", L"こんなんじゃきっと物足りない\n", L"くらい語っとけばうまくいく\n", L"物、金、愛、言、もう自己顕示飽きた" }; //调用函数 printLines(wstr,5,150); return 0; }接下来看看运行效果
运行效果
————————————END————————————
