舍友初学C++,写完hello world之后想要搞点花样,于是让我给他介绍了Sleep()和system()
不一会一个小程序就写好了
代码如下:
#include<cstdio> #include<windows.h> int main() { system("color ec"); Sleep(1000); printf("╔-- ╗ \n"); Sleep(900); printf("┇理 ┇ \n"); Sleep(800); printf("┇一 ┇ ╔-- ╗\n"); Sleep(700); printf("┇大 ┇ ┇法 ┇\n"); Sleep(600); printf("┇仙 ┇ ┇力 ┇\n"); Sleep(500); printf("┇, ┇ ┇无 ┇\n"); Sleep(400); printf("╚-- ╝ ┇边 ┇\n"); Sleep(300); printf(" ┇! ┇\n"); Sleep(200); printf(" ╚-- ╝\n"); while(1) ; return 0; }
请直接复制进windows环境下的dev c++或VS等IDE!
然后运行 震惊的事情发生了
中间的┇无法显示
使用“快速编辑模式” 选中控制台内文本 再取消选择后 使得控制台内文本被强制刷新
又能显示了???
黑人问号.jpg
然后我将控制台窗口拖至显示区域外 再拖回来
嗯 跟我想的一样:
初步认为控制台窗体的窗体重绘出现了问题
那么先帮同学解决问题 强制控制台内文本在输出时刷新重绘:
#include<cstdio> #include<windows.h> int main() { system("color ec"); Sleep(1000); printf("╔-- ╗ "); printf(" \n"); Sleep(900); printf("┇理 ┇ "); printf(" \n"); Sleep(800); printf("┇一 ┇ ╔-- ╗"); printf(" \n"); Sleep(700); printf("┇大 ┇ ┇法 ┇"); printf(" \n"); Sleep(600); printf("┇仙 ┇ ┇力 ┇"); printf(" \n"); Sleep(500); printf("┇, ┇ ┇无 ┇"); printf(" \n"); Sleep(400); printf("╚-- ╝ ┇边 ┇"); printf(" \n"); Sleep(300); printf(" ┇! ┇"); printf(" \n"); Sleep(200); printf(" ╚-- ╝"); printf(" \n"); while(1) ; }
第一次输出无法显示的问题解决 但是未能解决拖动到屏幕外窗体不刷新的问题
于是开始研究
随后我尝试将字符集改为Unicode 失败
尝试使用宽字符储存 失败
输出至文件 再用notepad++打开 发现格式混乱 但符合UTF-8编码
在VS中断点查看 发现┇占两个char 一个为-87 一个为-85
初步认为是宽字符 但是用wprintf又无法输出
而且窗体刷新问题还是无解。
至此已经超出了我个人水平 问题又不好描述 准备去stackoverflow发帖 先记在这里。
求大佬指点。。。