C++ 在我的C++;代码如果我在循环外打印sum,它会给出正确的答案,但在任何循环中都不会,为什么不呢? intmain() { long long int first=0,second=1,T,N;//这里T是案例数 cin>>T; 长整型晶圆=第一个+第二个; 长整型和[T]; 对于(长整型)i=0;i>N; 而(fab

C++ 在我的C++;代码如果我在循环外打印sum,它会给出正确的答案,但在任何循环中都不会,为什么不呢? intmain() { long long int first=0,second=1,T,N;//这里T是案例数 cin>>T; 长整型晶圆=第一个+第二个; 长整型和[T]; 对于(长整型)i=0;i>N; 而(fab,c++,C++,未初始化sum[T]变量。必须对其进行初始化: 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; whil

未初始化
sum[T]
变量。必须对其进行初始化:

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;
}
代码

long long sum[T] = {};

不是有效的C++。 谷歌搜索可变长度数组或动态数组。你可能会看到这样的答案

long long int sum[T];
这:

不是有效的C++。C++中的数组必须使用编译时表达式创建,以表示项目的数量,而不是变量,如<代码> t<代码> > < /P>

使用C++的标准结构是:C++ >代码> STD::向量< /代码>:

#包括
//...
cin>>T;
std::向量和(T);

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


这个故事的寓意是,如果你使用标准C++,你可能不会有问题。你的代码不是NtPoice:VLA不是标准C++。我认为它不仅仅是一个挑剔的东西。如果OP使用了适当的C++构造,比如<代码> STD::向量< /代码>,而不是VLA,它们就不会有问题,永远不会有PO。测试这个问题。更可能的是
std::vector sum(T);
vector的默认选项也会将支持数组的值初始化为零,并使OP的问题消失。事实上,使用标准类型是一种很好的做法。不过,原始海报必须学习一些关于include指令和名称空间的知识才能使用std::vector。
long long int *sum = new long long int[T].
cin >> T;
long long int sum[T];
#include <vector>
//...
cin >> T;
std::vector<long long> sum(T);