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

Why are double values stored in an array disappearing?

本文关键字:消失 存储 数组 为什么      更新时间:2023-10-16

我正试图编写一段代码,从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++不更新ii++递增该值,返回上一个值

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

只需写入++i;以递增i

(顺便说一句,其他答案都提到了序列点。我没有在意,因为它们是一个相当技术性的概念,你在写代码时通常不应该考虑:只需要写更清晰的版本。此外,它们已经不存在了,新版《标准》谈论的是"之前测序"answers"之后测序"。)

您的增量不正确:

i = i++ ;

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

++i ;

同样,使用good或eof是行不通的。

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

i++;

i = i + 1;

将两者放在一起,作为

i = i++;

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