如何从文本文件中读取值并将该值存储到临时变量中
How to read a value from a text file and store that value into a temporary variable?
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;
}
}
- 存储变量的更有效方法是什么?
- 使用 system() 不存储变量C++?
- 在递归DP中,通过存储变量来分解递归调用:效率低下
- 使用 LDAP 存储C++变量
- 在满足特定条件时运行迭代C++以存储变量
- 使用getline解析和存储变量
- 如何存储变量的地址并使用指针打印值
- C++ / Objective-C++ - 如何在 NSDictionary 中存储C++变量?
- 如何从文件中读取并存储变量
- 指针是否延长了自动存储变量的生存期
- 如何在 INI、CFG 或 XML 文件中存储C++变量
- 如何在 c++ 中的字符串数组中存储变量
- 如何在特定偏移量处存储变量
- 如何存储变量的前一个值并更新它以进行比较
- 存储变量的有效方法是什么?(自制虚拟机)
- 在C++中存储变量
- 在c++中按值调用时,存储变量的副本
- 为什么lambda只捕获自动存储变量
- 如何在寄存器中存储c++变量
- Getline()结合cin.ignore()不存储变量?(错误)