c++:按ENTER键前读取字符
C++: Reading characters before pressing ENTER
像几个小时现在,我试图找出如何读取字符从cin按下ENTER之前(通过使用线程)。我知道conio.h库,但我不喜欢使用它。
我写了一个简单的程序,从用户那里获取数据并将其保存在'msg'字符串中。程序具有每秒清除控制台的子线程。我想做的是:
- 用户输入一些数据,但没有按ENTER,所以它没有保存在'msg'变量。
- 控制台清除
- 发送计算用户输入的字符,所以他甚至不会注意到控制台被清除。
p。对不起,我的英语不好,下面是节目单:
#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: ";
}
因此,如果用户正在编写自己的消息时收到新消息,则会出现问题。在消息系统("cls")之前写入的部分消息在屏幕上丢失。
要做您想做的,您将需要合并一个消息队列和更新方法。
你能按你说的方法做吗?当然可以,但这将是一个很大的痛苦,而且没有办法用cin做到这一点。
只需在两边都有一个消息队列,每个客户端的当前状态(able_to_receive_messages, able等),以及在用户再次能够接收消息后运行每个客户端调用的更新方法。
相关文章:
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 从矢量C++读取字符时出现问题
- 从格式化输入操作中获取读取字符数
- 使用 cin.get 读取字符数组
- 按下回车键时,如何使数组停止读取字符
- C++:读取字符是不正确的
- 如何从输入文件中读取字符并将其存储到向量中?
- 线程函数无法从堆上分配的缓冲区中读取字符
- 使用 cin.get() 读取字符
- C++:使用 fgets() 读取字符输入时出错
- C++ 从文件中读取字符,计算每个字符并进行排序
- C ++ ifstream 无法读取字符串,并且在读取字符时出错
- 逐字读取字符数组,无需字符串函数
- 是否有任何方法可以在用户输入文本时读取字符
- 从字符串中读取字符时出错
- 如何按字符从文件到2D数组读取字符
- 重载>>运算符和读取字符
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 如何从文件中读取“”字符
- 读取字符 * 始终具有相同的地址