2013-02-25 57 views
0

以下是我必須告訴我是否必須發佈所有內容的信息。我想要的是,如果他們鍵入「tcc fcc(enter)」我想cube.rotateTopNeg90()然後cube.rotateFrontNeg90()在打印的立方體上工作。 編輯:對不起,這是我的問題上面,現在的命令只有一次工作(即:'tcc'(enter)'fcc'(enter)...)我想它是這樣的東西(' tcc''fcc''tcc''tcc'....(按照他們喜歡的次數重複)(輸入)),然後每個連續處理。這就是爲什麼我不能只使用cin。我在here之前詢問過這個問題,但我真的不知道如何去做。在C++中的一個輸入中讀取多個命令

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; 
} 
+2

我認爲使用'CIN << S;',而不是'函數getline(...)'會做你想要 – kassak 2013-02-25 13:30:15

+1

而百萬歐元一切(讓我們去便宜)的問題是什麼? – 2013-02-25 13:30:17

回答

0

我認爲以下幾點可以解決您的問題; std::getline正在採取從std::cin的整行,這是超過你想要的,因爲你的操作是在每個令牌的基礎上工作的。 std::cin對空格使用標記,因此op >>更適合您的應用程序。

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

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