2 qq 29943943 qq_29943943 于 2017.09.15 14:08 提问

MFC程序中打开了一个控制台窗口,第二次打开的时候如何清空第一次打开窗口的所有内容 2C

图片说明
MFC程序中打开了一个控制台窗口,执行了一些输入输出的功能。关闭这个窗口后下次再打开这个窗口依然会保留着上次控制台窗口的内容。
程序中通过点击按钮第二次打开这个窗口结果还是上一次执行的结果,怎么样才能清空上一次窗口的内容。
void CC350UdpTestDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
LoadDouble load;
load.length = 0;
char sendBuffer[1000];

memset(&load.container, 0, 100);

AllocConsole();
SetConsoleTitle(_T("Input Double Data"));
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);

cout << "Input:" << endl;

int i = 0;
while (cin >> load.container[i])
{
    load.length++;
    cout << load.container[i] << " ";
    i++;
    if (i > 100)
        break;
}

memset(sendBuffer, 0, 1000);
memcpy(sendBuffer, &load, sizeof(load));
sendBuffer[sizeof(load)] = 0x00;

LoadDouble loadtest;
memset(&load.container, 0, 100);
memcpy(&loadtest, sendBuffer, sizeof(loadtest));
cout << "loadtest.length:" << loadtest.length << endl;

sendto(sockClient, sendBuffer, sizeof(sendBuffer), 0, (SOCKADDR*)&local, len);

cout << "Successfully Send!" << endl;

system("pause");
fclose(stdout);
fclose(stdin);
int ret = FreeConsole();
if (ret == 0)
{
    MessageBox(_T("Failed Free!"));
}

MessageBox(_T("Successfully Send!"));

7个回答

barry_di
barry_di   2017.09.15 14:16

system("cls");

barry_di
barry_di 回复AbitLittle: 打开后清掉,如果不行那我只能说大兄弟我也没辙了
2 个月之前 回复
qq_29943943
qq_29943943 还是不行,每次打开都是运行结束的状态,感觉是每次打开都已经加载了第一次运行时的输入了。
2 个月之前 回复
shen_wei
shen_wei   Ds   Rxr 2017.09.15 15:11
 Detaches the calling process from its console.


BOOL WINAPI FreeConsole(void);


xingyun86
xingyun86   2017.09.15 19:01

是挺奇怪,感觉有点像是之前的输出动作未清除

xingyun86
xingyun86   2017.09.15 19:07

查出来了,是这一行出问题了
while (cin >> load.container[i])

第二次执行时,这里执行失败了。

xingyun86
xingyun86   2017.09.15 19:09

解决了,只要在关闭stdin前,执行cin的清除动作即可
cin.clear();

songhailiang020607
songhailiang020607   2017.09.16 11:02

system("clr");就可以清空控制台窗口里面之前打印的内容

u011046042
u011046042   2017.09.17 20:59

系统函数调用一下就好了,控制台清理
system("cls");

Csdn user default icon
上传中...
上传图片
插入图片