如何在不破坏我的第一个程序的情况下制作第二个cout?

时间:2015-07-28 19:43:43

标签: c++ multithreading cout cin carriage-return

#include "stdafx.h"
#include "iostream"
#include "thread"
#include "conio.h"
#include "windows.h"
using namespace std;

void incrm();
void charget();

void main() {
    thread count(incrm);
    thread getcin(charget);

    count.join();
    getcin.join();

    cin.get();
}

void incrm() {
    int j = 0;    // used to increment and output
    while (true) {
        cout << "\r" << j;    // outputs 1,2,3,4... and so on
        j++;
        Sleep(150);
    }
    cout << endl;
}

void charget() {
    while (true) {
        int i = getch();    // gets value of char
        cout << "\r\nCHAR: " << i;  // and here is the problem...!
    }
}

所以我希望这个程序在第一行输出一个数字,它在不停止的情况下递增,如果你点击任何一个键,它应该在一个第二行中输出该键的值,所以我希望它输出这样的东西 - &GT;

45
CHAR: 97

并且在您按下某个键后,递增的数字应该保留在第一行。如果你击中了几个键,那么第二个cout应该被覆盖,但是这对我来说似乎不起作用,如果我点击几个键,我的输出看起来像这样 - &gt;

10
12AR: 97
20AR: 96

我的问题是我的第一个cout(递增的数字)覆盖了我的第二个(或者我的第二个我不知道的第一个),然后这个数量为每一行! :(

1 个答案:

答案 0 :(得分:0)

我建议你使用名为gotoxy()的windows函数。您可以使用

应用此功能
SetConsoleCursorPosition();

这个函数在windows.h库中是可用的。 可以在这里阅读更多相关信息: Link