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

时间:2016-10-06 08:13:46

标签: c++

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;
  

我的输出: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。如果问题不明确,我想更详细地解释一下。

3 个答案:

答案 0 :(得分:3)

您拥有的代码存在多个问题。如何解决原先陈述的问题已经得到解答。我在评论中提到的另一个问题。但到目前为止,没有一个解决了阅读数字和&#34;标志的问题。串行,我将在这里展示。

你需要考虑的第一件事是输入是一系列数字和&#34;标志&#34;一个接一个。虽然你是正确的,需要一个循环,你还需要考虑实际的序列...你有一个数字,后跟一个符号后跟另一个数字等。

解决这个问题的简单方法是稍微改变一点。它不是以数字开头的序列。相反,将它视为一个孤独的数字,然后是一个可选的序列&#34;标志&#34;和数字。

然后你可以做类似

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

当输入只是一个数字时,上面的循环将处理这种情况。或者在他们之间使用+-的任意数量的数字。

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

答案 1 :(得分:2)

您再也不会从流中读取数据,只是使用相同的第一个数字两次。在行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;

答案 2 :(得分:1)

对于简单的情况,您可以使用不带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;
    }
  }