0

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

}

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

4

3 回答 3

1

总之,i=i++不更新ii++增加值,并返回前一个值

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

只需写入++i;increment i

(顺便说一句,其他答案提到了序列点。我没有打扰,因为它们是一个相当技术性的概念,无论如何您在编写代码时通常不应该考虑:只需编写更清晰的版本。而且,它们不存在任何更多的是,新版标准谈到了“sequenced before”和“sequenced after”。)

于 2013-07-26T18:24:59.987 回答
1

您的增量不正确:

i = i++ ;

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

++i ;

使用 good 或 eof是行不通的。

于 2013-07-26T18:27:51.267 回答
0

如果你想增加一个变量,它应该是:

i++;

或者

i = i + 1;

将两者放在一起,如

i = i++;

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

于 2013-07-26T18:27:12.297 回答