Icebound

icebound-area

奇怪的C++控制台问题

舍友初学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发帖 先记在这里。
求大佬指点。。。