我的程序想用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;
}
问题依然和上面一样的问题.郁闷请高手指点一下,如何实现我的目的:接受一次输入,即使用户输入的字符数超过了指定了个数,或者是含有空格,我只需要给出一行提示