如何在c ++中允许不同的输入量

时间:2014-04-15 03:06:21

标签: c++

假设所有变量都存在(没有在这里将它们全部声明)

  if(input=='R') goto restart;
  if(input=='X') exit(0);
  if(input=='D') moveRight(edgeLength, board, score);
  if(input=='S') moveDown(edgeLength,board, arrSize);
  if(input=='A') moveLeft(edgeLength,board, arrSize);
  if(input=='W') moveUp(edgeLength,arrSize,board);
  if(input=='P')
  {
      cin>> number>>position;
     board[position]=number;
  }

此输入被置于循环中,因此只要此游戏正在播放,就会要求用户输入。 我的目标是允许输入

p 3 50

将数字50放在索引位置3。

使用我当前的代码,我必须输入' p'按Enter键,然后按下两个数字。 但是,ID就像检测' p 3 50' (一次性输入),因为' D'(输入)表示moveRight。

我希望我的问题清楚。

2 个答案:

答案 0 :(得分:0)

  cin >> input >> number >> position;

  if(input=='R') goto restart;
  else if(input=='X') exit(0);
  else if(input=='D') moveRight(edgeLength, board, score);
  else if(input=='S') moveDown(edgeLength,board, arrSize);
  else if(input=='A') moveLeft(edgeLength,board, arrSize);
  else if(input=='W') moveUp(edgeLength,arrSize,board);
  else 
  {
        //whatever statements for last condition;
  }

如果您想一次捕获所有三个输入,您可以先获取输入,然后根据收到的输入执行相应的操作。

已添加:使用ifelse-if取决于具体情况。从我在您的代码段中看到的内容来看,else-if优于if,因为每次只能有一种输入类型。一旦找到匹配的字符(例如' D'),它将停止阅读下面的代码(这应该是没有必要检查其余条件是否输入是' S& #39;或者' A'或者' W,因为你已经得到了输入)。通过防止对条件进行不必要的检查,使代码的乐趣也变得更快。

概念验证:

//Example

void fncOne()
{
    cout << "This is function one" << endl;
}

void fncTwo()
{
    cout << "This is function two" << endl;
}

int main()
{
    char input;
    int number, position;
    cin >> input >> number >> position;
    if (input == 'A') fncOne();
    else if (input == 'B') fncTwo();
}

输入: A 3 5

输出: This is function one

答案 1 :(得分:0)

嗯,首先,您希望将用户输入作为字符串而不是单个类型。

std::string input;
std::cin >> input;

然后您将根据关键字/字符的单词数来解析该字符串。

e.g。

std::vector<std::string> words;
std::stringstream stream(input); std::string temp;

while(stream >> temp)
    words.push_back(temp);

if(words.size() == 3){
    if(words[0][0] = 'p'){
        int number = std::stoi(words[1]);
        int position = std::stoi(words[2]);
        board[position] = number;
    }
    else
        ... get input again ...
}
else if(words.size() > 1){
    ... get input again ...
}
else{
    char c = words[0][0];
    if(c == 'w')
        moveUp(edgeLength,arrSize,board);
    else if(c == 's')
        moveDown(edgeLength,board, arrSize);
    else if(c == 'a')
        moveLeft(edgeLength,board, arrSize);
    else if(c == 'd')
        moveRight(edgeLength, board, score);
    else if(c == 'x')
        exit(0);
    else if(c == 'r')
        goto restart;
    else
        ... get input again ...
}

当然,如果你想输入一个字符串然后只按一次输入,这只是一种方式。