谁能弄清楚这段代码如何显示 运行 错误?它正在打印无限时间 -1 以及正确答案
Can anyone figure out how this code showing running error? It is printing infinite time -1 along with correct answer
#include <iostream>
using namespace std;
int subarraysum(int arr[],int n,int sum){
int cur_sum=0,start=0;
for(int i=0;i<n;i++){
cur_sum=cur_sum+arr[i];
while(start<i && cur_sum>sum){
cur_sum=cur_sum-arr[start];
start++;
}
if(cur_sum==sum)
{
cout<<start<<" "<<i;
return 1;
}
}
cout<<"-1";
//return 0;
}
int main() {
int t;
cin>>t;
for(int l=0;l<t;t++){
int n,s;
cin>>n>>s;
int arr[n]={0};
for(int i=0;i<n;i++)
{cin>>arr[i];
}
subarraysum(arr, n, s);
}
return 0;
}
这个问题是简单的输入输出问题,但它正在打印我的答案和无限次 -1,我无法弄清楚这段代码的问题及其 运行 时间错误问题。
我觉得这里的问题确实比较棘手。您声明了一个函数 int subarraysum(int arr[],int n,int sum)
。这里的问题是 return 语句。您的函数 必须 return 一个值,但您的代码没有,采用这种形式。这会导致未定义的行为。 C++ 中的 int main()
-函数是 C++ 中唯一具有 non-void
-return 值的函数,允许不 return 任何东西。
根据编译器的优化级别,这种未定义的行为可能会导致无限循环,即使 for
循环在接缝退出之前也是如此。尝试在函数末尾取消注释 return 0;
,这应该可以完成工作。
顺便说一句。调试你的代码在这里对你没有帮助,因为在调试模式下行为是不同的。那里一切都会好起来的。在 -Wall -Wextra -pedantic
上编译带有所有警告的代码。编译器会告诉你可能有问题。将警告视为错误。
#include <iostream>
using namespace std;
int subarraysum(int arr[],int n,int sum){
int cur_sum=0,start=0;
for(int i=0;i<n;i++){
cur_sum=cur_sum+arr[i];
while(start<i && cur_sum>sum){
cur_sum=cur_sum-arr[start];
start++;
}
if(cur_sum==sum)
{
cout<<start<<" "<<i;
return 1;
}
}
cout<<"-1";
//return 0;
}
int main() {
int t;
cin>>t;
for(int l=0;l<t;t++){
int n,s;
cin>>n>>s;
int arr[n]={0};
for(int i=0;i<n;i++)
{cin>>arr[i];
}
subarraysum(arr, n, s);
}
return 0;
}
这个问题是简单的输入输出问题,但它正在打印我的答案和无限次 -1,我无法弄清楚这段代码的问题及其 运行 时间错误问题。
我觉得这里的问题确实比较棘手。您声明了一个函数 int subarraysum(int arr[],int n,int sum)
。这里的问题是 return 语句。您的函数 必须 return 一个值,但您的代码没有,采用这种形式。这会导致未定义的行为。 C++ 中的 int main()
-函数是 C++ 中唯一具有 non-void
-return 值的函数,允许不 return 任何东西。
根据编译器的优化级别,这种未定义的行为可能会导致无限循环,即使 for
循环在接缝退出之前也是如此。尝试在函数末尾取消注释 return 0;
,这应该可以完成工作。
顺便说一句。调试你的代码在这里对你没有帮助,因为在调试模式下行为是不同的。那里一切都会好起来的。在 -Wall -Wextra -pedantic
上编译带有所有警告的代码。编译器会告诉你可能有问题。将警告视为错误。