2013-03-22 71 views
0

好的我在这里遇到问题。我正在制作一款幻灯片益智游戏。玩家被问到他想移动哪个棋子,直到拼图解决。如果玩家想要退出,请输入Qq,然后按enter即可。该程序工作得很好。但我有一个问题:如果我插入CTRL+Z,该计划将loop意外......CTRL + Z使程序循环无限地在C++中

这是一个重要的一段代码:

 // analyzes user input 
     if (piece_to_move_string == "q" || 
      piece_to_move_string == "Q") 
     { 
      cout << endl << "You chose to quit." << endl; 
      pressanykey(); 
      break; 
     } 
     else 
     { 
      piece_to_move = atoi(piece_to_move_string.c_str()); 

      if (1 <= piece_to_move && piece_to_move <= pow(puzzle_size,puzzle_size)) 
      { 
       game_board = move_piece (game_board, piece_to_move); 
      } 
      else 
      { 
       cout << "Not possible."; 
      } 
     } 

编辑:但仍然无法正常工作..

// analyzes user input 
     if (piece_to_move_string == "q" || 
      piece_to_move_string == "Q") 
     { 
      cout << endl << "You chose to quit." << endl; 
      pressanykey(); 
      break; 
     } 
     else if (cin.eof()) 
     { 
      //do nothing 
     } 
     else 
     { 
      piece_to_move = atoi(piece_to_move_string.c_str()); 

      if (1 <= piece_to_move && piece_to_move <= pow(puzzle_size,puzzle_size)) 
      { 
       game_board = move_piece (game_board, piece_to_move); 
      } 
      else 
      { 
       cout << "Not possible."; 
      } 
     } 
+0

删除一切,但必需品。 – 2013-03-22 20:35:05

回答

5

按Ctrl + Z意味着“文件结束”(假设你使用的是Windows),因此一旦用户点击,在你cin处于不可读状态。检查cin.eof()

if (cin.eof() || piece_to_move_string == "q" || 
       piece_to_move_string == "Q") 
{ 
    cout << endl << "You chose to quit." << endl; 
} 
+1

以我的经验(bash),Ctrl + D表示文件结尾,Ctrl + Z导​​致程序在后台运行。这个系统正在运行什么系统? – Lorkenpeist 2013-03-22 20:30:21

+0

@Lorkenpeist:在Windows上是Ctrl + Z。据此编辑。 – RichieHindle 2013-03-22 20:31:24

+0

它正在窗口上使用 – 2013-03-22 20:32:13