我的程序想用cin读入一个命令,代码如下
while(1){
std::string cmd;
std::cin >> cmd;
if (strcmp(cmd.c_str(),"shutdown") == 0)
{
...............................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
std::cin.clear();
}
发现问题:如果输入的东东有空格,则会自动给到下次循环,
打印出多行undefined command.please redo ..."
我怀疑是cin缓冲区导致的,于是clear();一下,还是有这个问题.(还不太清楚clear的用法)于是改用getline,如下
while(1){
char cmd[1024];
std::cin.getline(cmd,10) ;
if (strcmp(cmd,"shutdown") == 0)
{
............................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
std::cin.clear();
}
空格的问题倒是没有了,但是如果输入的超过了给定10字节,如输入
111111111111111111111111111111111111111111111111111111
则会打印
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...还是怀疑cin缓冲区.于是再次试验如下代码,每次都重新构造对象
while(1){
char cmd[1024];
std::istream* p = new std::istream(std::cin);
p->getline(cmd,10) ;
if (strcmp(cmd,"shutdown") == 0)
{
....................................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
delete p;
}
问题依然和上面一样的问题.郁闷请高手指点一下,如何实现我的目的:接受一次输入,即使用户输入的字符数超过了指定了个数,或者是含有空格,我只需要给出一行提示
while(1){
std::string cmd;
std::cin >> cmd;
if (strcmp(cmd.c_str(),"shutdown") == 0)
{
...............................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
std::cin.clear();
}
发现问题:如果输入的东东有空格,则会自动给到下次循环,
打印出多行undefined command.please redo ..."
我怀疑是cin缓冲区导致的,于是clear();一下,还是有这个问题.(还不太清楚clear的用法)于是改用getline,如下
while(1){
char cmd[1024];
std::cin.getline(cmd,10) ;
if (strcmp(cmd,"shutdown") == 0)
{
............................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
std::cin.clear();
}
空格的问题倒是没有了,但是如果输入的超过了给定10字节,如输入
111111111111111111111111111111111111111111111111111111
则会打印
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...
undefined command.please redo ...还是怀疑cin缓冲区.于是再次试验如下代码,每次都重新构造对象
while(1){
char cmd[1024];
std::istream* p = new std::istream(std::cin);
p->getline(cmd,10) ;
if (strcmp(cmd,"shutdown") == 0)
{
....................................
break;
} else {
std::cout << "undefined command.please redo ..." << std::endl;
}
delete p;
}
问题依然和上面一样的问题.郁闷请高手指点一下,如何实现我的目的:接受一次输入,即使用户输入的字符数超过了指定了个数,或者是含有空格,我只需要给出一行提示
解决方案 »
- Progress 控件问题
- HOOK安装全局WH_GETMESSAGE用来截取键盘输入的问题
- 怎么滚动条松开鼠标才触发事件?
- CalphaCtrl控件在哪找
- [请教]如何在我的程序里发消息使打开的记事本程序自动打开字体对话框(记事本非激活状态)
- 100分!多个线程,对一个CDocument 类进行操作,使用了互斥机制,为何还出错阿?请高手指点迷津阿,头都大了:(
- 如何得出子窗口在父窗口中的坐标位置
- RtlMoveMemory这个函数怎么用,高人帮忙
- 单文档 树控件
- 求助MFC怎么验证HTTP、SOCK5代理IP的有效性,我的代码无效
- 我使用DirectShow来控制从 DVD->硬盘 导入数据,如何检测磁盘满了
- if (hIcon &&hIcon!=(HICON)-1) 什么意思啊?
string GetCommand()
{
string ret;
TCHAR cmd_buf[200];
cout << "ftp> "; ZeroMemory(cmd_buf, sizeof(TCHAR)*200);
cin.getline(cmd_buf, 200, '\n');
ret = cmd_buf;
return ret;
}