我正在尝试编写代码以从 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
。
(顺便说一句,其他答案提到了序列点。我没有打扰,因为它们是一个相当技术性的概念,无论如何您在编写代码时通常不应该考虑:只需编写更清晰的版本。此外,它们不会不再存在,新版本的标准谈论“前序”和“后序”。)
关于c++ - 为什么存储在数组中的 double 值会消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888401/