在我的C++代码中,如果我在循环外打印sum,它会给出正确的答案,但在任何循环中都不会,为什么不呢

In my C++ code If I print sum outside loop it gives correct answer, but not in any loop for/while, why not?

本文关键字:循环 答案 任何 为什么不 如果 代码 C++ 我的 sum 打印      更新时间:2023-10-16
int main()
{
  long long int first=0,second=1,T,N;     //here T is Number of Cases
  cin>>T;
  long long int fab=first+second;
  long long int sum[T];
  for(long long int i=0;i<T;i++)
  {
    cin>>N;
    while(fab<N)
    {
      first=second;
      second=fab;
      if(fab%2==0)
      {
        sum[i]+=fab;
      }
      fab=first+second;
    }
  }
for(int i=0;i<T;i++)
{
  cout<<sum[i]<<endl;
}
  return 0;
}

在上面的循环中,sum并不能提供正确的答案,但如果sum在循环之外使用,则它给出了适当的答案。

这:

cin >> T;
long long int sum[T];

不是有效的C++。C++中的数组必须使用编译时表达式来创建,以表示项数,而不是像T这样的变量。

标准C++的正确结构是std::vector<long long>:

#include <vector>
//...
cin >> T;
std::vector<long long> sum(T);

该代码现在是标准C++。

该代码所做的另一个方面是解决DietrichEpp在回答中提出的问题,即未能将VLA初始化为0。上面的矢量会自动将项目初始化为0。

因此,这个故事的寓意是,如果你使用标准C++,你的代码可能不会有问题。

sum[T]变量未初始化。您必须初始化它:

long long sum[T] = {};

代码

long long int sum[T];

不是有效的C++。

谷歌搜索可变长度数组或动态数组。你可能会看到类似的答案

long long int *sum = new long long int[T].
相关文章: