如何在C ++中按Enter / Return键退出程序循环?

时间:2019-05-04 08:07:42

标签: c++ algorithm

挑战是这样给出的:

为您提供了数量未知的测试用例。每个测试用例都包含一个自然数,其后是一个空格,关系运算符(==,!=,> =或<=),空格和另一个自然数。所有测试用例都用换行符分隔。您可以假设数字不超过1000位。

因此,我正在尝试使用C ++解决上述问题。问题是,该程序应在任何情况下都可以运行,这些情况将由Online Judge进行检查,但我的代码仅适用于有限数量的输入,因为该代码将由在线法官检查,并且未指定输入数量。因此,我坚持了如何解决此问题的方法。我也尝试使用do..while() loopwhile() loop,但它不起作用-_-

我的代码如下:


#include <iostream>

using namespace std;


bool isSmaller(int n1, int n2, string oper)
{
    // Calculate lengths of both string
    if (oper == "==")
      /* code */
    if (n1 == n2)
    return true;

    if (oper == "<=")
      /* code */
    if (n1 <= n2)
    return true;

    if (oper == ">=")
      /* code */
    if (n1 >= n2)
    return true;

    if (oper == "!=")
      /* code */
    if (n1 != n2)
    return true;


    return false;
};

int main() {
  /* code */
  int n1, n2;
  string oper;

  for (int i = 0; i < 1; i++) {
    cin >>n1>>oper>>n2;
  }

  for (int j = 0; j < 1; j++) {
    if(isSmaller(n1, n2, oper)){
      std::cout <<1<<'\n';
    }
    else{
      std::cout <<0<< '\n';
    }
  }

  return 0;
}

理想的输出:

二进制序列应出现在输出中。序列的第 i 个元素应等于1或0,具体取决于对应关系是对还是对。序列中的所有元素都应以换行符分隔。

Example
Input:
100 == 200
200 <= 100
200 >= 100

Output:
0
0
1

2 个答案:

答案 0 :(得分:-1)

最后,我根据@bruno给出的提示编写了代码,但是仍然在线判断返回错误,我不知道问题出在哪里,但是代码似乎是正确的。

代码在下面:

#include <iostream>
#include <iomanip>
#include <sstream>
#include <list>

using namespace std;


bool computeResult(string line)
{
    // compare two values from given operator
    istringstream stream(line);
    int n1, n2;
    string oper;
    stream >> n1 >> oper >> n2;
    stream >> std::cout.rdbuf();
    if (oper == "==")
      return (n1 == n2);

      if (oper == "!=")
        return (n1 != n2);

          if (oper == ">=")
            return (n1 >= n2);

              if (oper == "<=")
                return (n1 <= n2);

     return false;
};

int main() {
  /* code */
  list<bool> result;
  std::string line;
  std::istringstream stream(line);


  cout << "Enter Numbers \n";

  std::getline(std::cin, line);

  do {
    result.push_back(computeResult(line));
  } while(std::getline(std::cin, line) && !line.empty());

  for (auto b : result)
    std::cout << b << std::endl;

  return 0;
}

答案 1 :(得分:-1)

这里scanf()将帮助您进行未知数量的输入。 您可以在C ++程序中包含或使用scanf()和printf()。

while(scanf("%d %s %d",&n1,oper,&n2) == 3)
{
    //Your code goes here.
}

说明 之所以有效,是因为scanf()返回成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则返回EOF。 在这种情况下,它将成功扫描n1,oper和n2并返回3。