我正在尝试编写代码来从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++;
}
该值在一个循环后存储在数组中,但在下一个循环运行后,先前存储的值将重置为零。我无法确定它的编码语法是什么。
答案 0 :(得分:1)
简而言之,i=i++
不会更新i
。
i++
增加值,返回先前值。
无论如何,此版本是未定义的行为,因为您在一个表达式中更新了两次值。
但是,在实践中可能发生的事情是,您只是每次都将i
设置回自身,并在每次迭代时覆盖相同的行。但是,未定义的行为意味着可能发生任何事情!你的整个课程都变得毫无意义。
只需撰写++i;
即可增加i
。
(顺便说一句,其他答案提到了序列点。我没有打扰,因为它们是一个相当技术性的概念,你在编写代码时通常不应该考虑:只写更清晰的版本。而且,他们不要'不再存在,新标准的标准谈到“先前排序”和“之后排序”。)
答案 1 :(得分:1)
您的增量不正确:
i = i++ ;
更糟糕的是它是未定义的行为,这意味着程序可以表现出任何行为,即使行为看起来正确但你也无法预测结果。在这种情况下,它是未定义的,因为不允许在序列点之间多次修改同一个变量。只需使用独立的pre(++i
)或post(i++
)增量,例如:
++i ;
同样using good or eof无效。
答案 2 :(得分:0)
如果要增加变量,则应该是:
i++;
或
i = i + 1;
将两者放在一起,如
i = i++;
导致未定义的行为 - 未指定尝试在两个序列点之间两次更新相同的变量。