为什么存储在数组中的双值会消失
Why are double values stored in an array disappearing?
我正试图编写一段代码,从csv文件中读取值,并将它们存储在四个单独的数组中。每行有4个值。第一个值将存储在一个数组中,第二个存储在另一个数组,第三个存储在第三个数组,而第四个存储在另外一个数组。这是我迄今为止写的代码:
while (FBWS.good())
{
getline ( FBWS, infor,',');
istringstream (infor) >> infoc;
FBWSmin[i]=infoc;
cout << FBWSmin[i-1] << " ";
cout << FBWSmin[i] << "n";
getline ( FBWS, infor,',');
istringstream (infor) >> infoc;
FBWSplus[i]=infoc;
getline ( FBWS, infor,',');
istringstream (infor) >> infoc;
FBWStax[i]=infoc;
getline ( FBWS, infor,',');
istringstream (infor) >> infoc;
FBWSmax[0]=infoc;
i=i++;
}
该值在一个循环后存储在数组中,但在下一个循环运行后,上一个存储的值将重置为零。我无法确定它的编码语法是什么。
简而言之,i=i++
不更新i
。i++
递增该值,返回上一个值。
无论如何,这个版本都是未定义的行为,因为您在一个表达式中更新了两次值。然而,在实践中可能发生的情况是,您每次都只是将i
设置回自己,并在每次迭代中覆盖同一行。但是,未定义的行为意味着任何事情都有可能发生!你的整个程序变得毫无意义。
只需写入++i;
以递增i
。
(顺便说一句,其他答案都提到了序列点。我没有在意,因为它们是一个相当技术性的概念,你在写代码时通常不应该考虑:只需要写更清晰的版本。此外,它们已经不存在了,新版《标准》谈论的是"之前测序"answers"之后测序"。)
您的增量不正确:
i = i++ ;
更糟糕的是,它是未定义的行为,这意味着程序可以表现出任何行为,即使是看起来正确但无法预测结果的行为。在这种情况下,它是未定义的,因为不允许在序列点之间多次修改同一变量。只需使用独立的前(++i
)或后(i++
)增量,例如:
++i ;
同样,使用good或eof是行不通的。
如果你想增加一个变量,它应该是:
i++;
或
i = i + 1;
将两者放在一起,作为
i = i++;
导致未定义的行为——未指定在两个序列点之间尝试更新同一变量两次。
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 将地址分配给本地指针后,公共对象的变量将消失
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么存储在数组中的双值会消失
- 创建一个新对象并将该对象存储在新类的向量中,属性消失