gpt4 book ai didi

C++:在按 ENTER 之前读取字符

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:30 26 4
gpt4 key购买 nike

现在有几个小时了,我试图弄清楚如何在按 ENTER 之前(通过使用线程)从 cin 中读取字符。我知道 conio.h 库,但我不想使用它。

我写了一个简单的程序,从用户那里获取数据并将其保存在“msg”字符串中。程序有每秒清除一次控制台的子线程。我想做的是:

  1. 用户输入了一些数据但没有按 ENTER,因此它没有保存在“msg”变量中。
  2. 控制台清除
  3. 发送给 cout 用户输入的字符,这样他甚至不会注意到控制台已被清除。

附言。对不起我的英语,这是程序:

#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;
}

编辑:

键盘记录器?不,我正在做控制台网络聊天。目前服务器和客户端可以互相聊天。当收到或发送新消息时,它被保存在“vector<\string> chat”中,控制台在代码下面刷新:

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: ";
}

因此,如果在用户编写自己的消息时收到新消息,则会出现问题。在 message system("cls") 之前写入的部分消息在屏幕上丢失了。

最佳答案

要执行您想要的操作,您需要合并一个消息队列和更新方法。

你能按照你介绍的那样做吗?当然可以,但这将是一个很大的痛苦,并且没有办法用 cin 做到这一点。

只需在两侧都有一个消息队列,每个客户端的当前状态(able_to_receive_messages,无法等),以及在用户再次能够接收消息后运行的每个客户端调用的更新方法。

关于C++:在按 ENTER 之前读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691637/

26 4 0
文章推荐: html - Auto Div 高度取决于另一个
文章推荐: java - Maven 集成测试不适用于 Spring
文章推荐: css - 二十二主题的边距
文章推荐: java - 使用Comparable