1
對於現在幾個小時,我想弄清楚如何在按ENTER鍵(通過使用線程)之前從cin中讀取字符。我知道conio.h庫,但我不喜歡使用它。C++:按ENTER之前閱讀字符
我寫了一個簡單的程序,從用戶獲取數據並將其保存在'msg'字符串中。程序有一個每秒清除控制檯的子線程。我想要做的是:
- 用戶放入一些數據,但沒有按ENTER鍵,因此它不會保存在「msg」變量中。
- 控制檯清除
- 發送給cout用戶輸入的字符,所以他甚至不會注意到控制檯已被清除。
PS。對不起,我的英語,這裏的程序:
#include<iostream>
#include<string>
#include<winsock2.h>
#include<process.h>
#include<windows.h>
using namespace std;
void __cdecl ThreadProc(void * Args)
{
while(true){
system("cls");
cout << "Input: ";
/*
char c;
while((c=cin.peek()) != '\n')
cin.get(c);
cout << c;
*/
Sleep(1000);
}
_endthread();
}
int main(){
HANDLE hThread =(HANDLE) _beginthread(ThreadProc, 0, NULL);
while (true){
string msg;
getline(cin,msg);
cout << "MSG:" << msg << endl;
cin.clear();
fflush(stdin);
}
return 0;
}
編輯:
主要記錄器?那麼,我正在進行控制檯網絡聊天。目前,服務器和客戶端可以與對方聊天。如果在用戶編寫自己收到新的消息
void show_chat(){
system("cls");
for(unsigned int i =0;i<chat.size();i++){
cout << "[" << date[i].tm_hour << ":" << date[i].tm_min << ":" << date[i].tm_sec << "] " << chat[i] << endl;
}
cout << "Input: ";
}
因此,有一個問題:當接收或發送新郵件時,它被保存在「矢量< \字符串>聊天」,並刷新控制檯下面的代碼信息。在消息系統(「cls」)之前寫入的部分消息在屏幕上丟失。
沒有標準的C++庫函數來執行此操作。你必須使用特定於操作系統的代碼(而不是'cin' - 但你可能會做類似的工作),或者使用第三方庫(curses或類似的)。 –
不確定你爲什麼要這樣做。你在寫密鑰記錄器嗎? –
另外,使用來自多個線程的'cin'幾乎肯定會導致各種不好的事情。 –