为什么存储在数组中的双值会消失?

时间:2013-07-26 18:23:49

标签: c++ arrays csv store

我正在尝试编写代码来从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++;

}

该值在一个循环后存储在数组中,但在下一个循环运行后,先前存储的值将重置为零。我无法确定它的编码语法是什么。

3 个答案:

答案 0 :(得分:1)

简而言之,i=i++不会更新ii++增加值,返回先前值

无论如何,此版本是未定义的行为,因为您在一个表达式中更新了两次值。 但是,在实践中可能发生的事情是,您只是每次都将i设置回自身,并在每次迭代时覆盖相同的行。但是,未定义的行为意味着可能发生任何事情!你的整个课程都变得毫无意义。

只需撰写++i;即可增加i

(顺便说一句,其他答案提到了序列点。我没有打扰,因为它们是一个相当技术性的概念,你在编写代码时通常不应该考虑:只写更清晰的版本。而且,他们不要'不再存在,新标准的标准谈到“先前排序”和“之后排序”。)

答案 1 :(得分:1)

您的增量不正确:

i = i++ ;

更糟糕的是它是未定义的行为,这意味着程序可以表现出任何行为,即使行为看起来正确但你也无法预测结果。在这种情况下,它是未定义的,因为不允许在序列点之间多次修改同一个变量。只需使用独立的pre(++i)或post(i++)增量,例如:

++i ;

同样using good or eof无效。

答案 2 :(得分:0)

如果要增加变量,则应该是:

i++;

i = i + 1;

将两者放在一起,如

i = i++;

导致未定义的行为 - 未指定尝试在两个序列点之间两次更新相同的变量。