如何从文本文件中读取值并将该值存储到临时变量中

How to read a value from a text file and store that value into a temporary variable?

本文关键字:存储 变量 文件 文本 读取      更新时间:2023-10-16
istringstream in("4.2 + 3.4 - 4.1");
ostringstream out;
string sign;
double num;
double tempNum = 0;
double sum = 0;
while (in >> num >> sign) {
    tempNum = num;  
    if (sign == "+") {
        sum = (num + tempNum); 
    }
}
cout << sum << endl;

My Output: 8.4

正确输出:3.5

我想将4.2存储到tempNum中,并将3.4读取到num中,这样我就可以将8.4和3.4添加到总和中。然而,我遇到的问题是,每当它读取4.2时,它都会将4.2赋值给num,然后读取3.4并将3.4赋值给tempNum。我如何将4.2赋值到tempNum并将3.4仅留在num变量中?这样和就是4.2 + 3.4,而不是4.2 + 4.2。如果您不清楚,我愿意再详细解释一下。

您的代码存在多个问题。如何解决原来所说的问题已经有了答案。我在评论中提到的另一个问题。但是到目前为止,还没有一种解决了按顺序读取数字和"符号"的问题,我将在这里展示。

你需要考虑的第一件事是输入是一个数字序列和"符号"彼此相连。虽然你认为循环是正确的,但你也需要考虑实际的顺序……你有一个数字,后面跟着一个符号,后面跟着另一个数字,等等。

解决这个问题的简单方法是换个角度思考。它不是一个以数字开头的序列。可以把它想象成一个单独的数字,后面跟着一个可选的"符号"和数字序列。

然后你可以这样写

in >> sum;
while (in >> sign >> num)
{
    if (sign == "+")
    {
        sum += num;
    }
    else if (sign == "-")
    {
        sum -= num;
    }
}

上面的循环将处理输入只有一个数字的情况。或任意数量的中间有+-的数字

这仍然不能正确处理乘法和除法之类的事情。为此,您需要另一种更复杂的方法。

永远不会从流中读取第二次,只是两次使用相同的第一个数字。在tempNum = num行之后,您的意思可能是新数字应该读为:

in >> num;

还请注意,一步一步的调试过程与打开手表窗口是非常好的处理这类问题。

UP:整个代码看起来像这样:

istringstream in("4.2 + 3.4");
ostringstream out;
string sign;
double num;
double tempNum = 0;
double sum = 0;
while (in >> num >> sign) {
    tempNum = num;  
    in >> num;
    if (sign == "+") {
        sum = (num + tempNum); 
    }
}
cout << sum << endl;

对于简单的情况,您可以使用不带while循环的流提取操作符。就像

in >> x >> sign >> y;

下面是完整的示例

  std::istringstream in("4.2 + 3.4");
  std::string sign;
  double x, y;
  in >> x >> sign >> y;
  std::cout << x << std::endl;
  std::cout << sign << std::endl;
  std::cout << y << std::endl;
  double sum = x + y;
  std::cout << sum << std::endl;

如果输入变得更复杂,尝试像这样的while循环

  std::istringstream in("4.2 + 3.4 - 4.1");
  std::string temp;
  double op; //for + becomes 1.0 for - becomes -1.0
  double sum = 0;
  in >> sum; //Get the first value
  while (in >> temp) {
    //check for operator
    if (temp == "+") {
      op = 1.0;
    }
    else if (temp == "-") {
      op = -1.0;
    }
    else {
      double next = std::stod(temp,NULL);
      sum += op * next;
    }
  }