如何清除c++应用程序中的输入缓冲区
How can I clear the input buffer in a c++ application?
我制作了很多简单的控制台c++应用程序,我面临的一个问题是输入缓冲区。我试过cin.ignore和flush((,但它们似乎对我不起作用。
如果我有这样的代码:
cin >> char1;
cin >> char2;
然后按:1(空格(2(回车(,只需输入一次,1存储到char1,2存储到char2。
对不起,如果我问的问题有点含糊。如果人们不理解,我会尝试编辑这个问题。
您可以使用getline一次读取整行,如果需要第一个字符,则使用std::string at,如果需要一个数字,则使用isstringstream
。
char char1;
std::string input;
getline(std::cin, input);
if (!std::cin.good()) {
// could not read a line from stdin, handle this condition
}
std::istringstream is(input);
is >> char1;
if (!is.good()) {
// input was empty or started with whitespace, handle that
}
如果你经常这样做的话,把它封装在一个函数中。根据以上内容,如果直接点击回车键(未输入字符(,或者输入以空格开头的数据,则is
将为!good()
,因此char1
将而不是。
或者,在检查cin
仍然良好后,您可以简单地:
if (input.empty()) {
// empty line entered, deal with this
}
char1 = input.at(0);
这样,如果字符串不是空的,那么char1
将被设置为第一个char
,如果是input
,不管是什么(包括空白(。
注意:
is >> char1;
将只读取第一个字符,而不是第一个数字(与input.at()
版本相同(。因此,如果输入是123 qze
,则char1
将接收'1'
(如果ASCII,则为0x31(,而不是值123。不确定这是否是你想要的。如果不是您想要的,请读取int
变量,然后进行适当的强制转换。
看这个:
int a,b;
cin>>a;
cin.ignore(INT_MAX,'n');
cin>>b;
这将读入并忽略所有内容,直到'\n'忽略单行
如果您只想从行中读取第一个字符,请读取整行,然后将其拆分:
std::string s;
std::cin >> s;
char1 = s[0]; // this reads the lead character
如果您想要第一个非空白字符,请使用istringstream并获取一个字符:
#include <sstream>
std::istringstream iss(s);
iss >> char1;
在linux上使用"C"方式需要termios,看起来像这样:
#include <termios.h>
struct termios t;
tcgetattr(0, &t);
t.c_lflag &= ~ICANON; // unbuffered
tcsetattr(0, TCSANOW, &t); // make the change now
char1=getchar()
char2=getchar()
现在,如果您尝试键入"12",则char1='1'和char2='2'
如果您使用cstdio,则:
rewind( stdin );
应该做这项工作。否则,我想你的问题已经在"如何冲洗cin缓冲液?"中得到了回答?。
cin >> char1;
cin >> char2;
fflush(stdin);
如果用户输入:aaaaa bbbbb ccccc
它将输入aaaaa into char1
并放入bbbbb into char2
其余部分将被忽略
- 是否可以将键盘输入绑定到 Win32 中的单个应用程序?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 直接输入控制台应用程序
- 如何在控制台应用程序中添加滚动功能以显示更大的输入
- Windows 中应用程序的每秒输入/输出操作数
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- q输入对话框使 Unity 任务栏和标题栏在全屏应用程序中可见
- 将键盘输入模拟传递给控制台应用程序
- 我的 SDL2 应用程序仅在第一次键盘输入后出现严重延迟
- C 程序在获取输入[控制台应用程序]时跳过行
- 全球安装的键盘钩可防止键盘输入其他应用程序
- 如何将可编辑的预定义字符串写入 C++ 控制台应用程序中的 cin 输入运算符
- 如何从 win32 控制台应用程序获取输入
- 如何在 C++ 控制台应用程序中将输入与输出分开?我可以有两个游标吗?
- 如何在控制台应用程序中使用GetMessage()使用Windows API识别C++中的键盘输入
- 如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息
- 保存“编辑控件”用户输入并在应用程序重新启动C++Visual Studio时进行恢复的有效方法
- 应用程序的响应时间与给定时间段内输入触发器的数量不经意地相关
- 在不模拟Ctrl+V的情况下将数据粘贴到任何应用程序输入字段中.Windows c++