在c ++中读取一个输入中的多个命令

时间:2013-02-25 13:27:27

标签: c++ iostream

这就是我要告诉我的是否必须发布所有内容。我想要的是如果他们键入“tcc fcc(enter)”我想要cube.rotateTopNeg90()然后cube.rotateFrontNeg90()来处理打印的多维数据集。 编辑:对不起,这是我上面的问题,现在这些命令一次只能工作一次(即:'tcc'(输入)'fcc'(输入)...)我希望它是这样的('tcc ''fcc''tcc''tcc'....(重复多次)(输入))然后每个都连续处理。这就是为什么我不能只使用cin。我在here之前问过这个问题,但我真的不知道怎么做。

class RubiksCube
{
    public:

        RubiksCube::RubiksCube() { /*stuff here*/  }

        void display() { /*prints the cube unfolded here*/  }

        void rotateTopNeg90() { /*moves top of the cube counterclockwise*/ }

        void RubiksCube::rotateFrontNeg90() { /*moves front counterclockwise*/ }
}

//main
int main(int argc, char *argv[])
{   
    RubiksCube cube;
    string s;  
    srand(time(0));
    while (1)
    { 
        string rotateTopNeg90 = "tcc";
        string rotateFrontNeg90 = "fcc";
        cube.display();
        cout << "COMMAND:";
        getline(cin,s);
        istringstream stream(s);

        if (s == rotateTopNeg90 )
            cube.rotateTopNeg90();

        if ( s == rotateFrontNeg90 )
            cube.rotateFrontNeg90();
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我认为以下内容可以解决您的问题; std::getlinestd::cin开始占据整行,因为您的操作基于每个令牌,因此超出了您的预期。 std::cin在空格上标记,因此op&gt;&gt;更适合您的应用。

const std::string rotateTopNeg90   ="tcc",
                  rotateFrontNeg90 ="fcc";

while(std::cin >> s) {
   if (s == rotateTopNeg90 )
        cube.rotateTopNeg90();
   else if ( s == rotateFrontNeg90 )
       cube.rotateFrontNeg90();
   cube.display();
}