在我的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?
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].
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 欧拉项目#8答案是大以获得有效答案
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 尝试创建一个程序来查找非二叉树的高度.最终得到一个很长的循环,没有答案
- 使用分而治之的最大总和子数组,为什么要以不同的方式使用 for 循环,答案是错误的?
- 无法在 for 循环中的 pow 函数上输出答案
- 在具有不同"for"循环的列中生成答案
- 我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
- 没有从方程式中得到正确的答案.还有无限循环
- C++测验:使用矢量正确循环显示答案选项
- 如何计算循环中正确答案的数量
- 为什么此代码不显示计算的正确答案,为什么它会无限循环?
- 如果通过循环求和,下面的程序会找到正确的答案,但如果通过GP的公式求和,则会找到不正确的答案.为什么
- 如果此代码中的答案为"N",我该如何转到第一个 while 循环:
- 循环未给出预期答案-不确定退出/返回/中断
- 在我的C++代码中,如果我在循环外打印sum,它会给出正确的答案,但在任何循环中都不会,为什么不呢