0

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

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;
}
4

1 回答 1

0

我认为以下内容可以解决您的问题;由于您的操作以每个令牌为基础,因此您std::getline正在接受比您想要的更多的整条生产线 。对空白进行标记,因此 op>> 更适合您的应用程序。std::cinstd::cin

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

while(std::cin >> s) {
   if (s == rotateTopNeg90 )
        cube.rotateTopNeg90();
   else if ( s == rotateFrontNeg90 )
       cube.rotateFrontNeg90();
   cube.display();
}
于 2013-02-25T13:37:21.283 回答