为什么我的代码无法运行?
问题描述:
#include<iostream>
#include<set>
using namespace std;
main(){
int n,m;
set<int> number;
int num;
int query[m];
for(size_t i=0;i<n;i++){
cin >> num;
number.insert(num);
}
for(size_t j=0;j<m;j++){
cin >> query[j];
}
for(int l=0;l<m;l++){
for(auto k:number){
if(number.find(query[l]-k)!=number.end()){
cout << "YES" << endl;
break;
}else{
cout << "NO" << endl;
break;
}
}
} }
为什么我的代码无法运行? 当我编译和运行它。埃克说, how it says为什么我的代码无法运行?
我如何运行此代码。 对不起。我不擅长英语。 我使用谷歌翻译将我的语言转换为英语。
答
#include <iostream>
#include <set>
using namespace std;
int main(){
int n,m;
set<int> number;
int num;
cin >> m >> n;
int query[m];
for(size_t i=0;i<n;i++){
cin >> num;
number.insert(num);
}
for(size_t j=0;j<m;j++){
cin >> query[j];
}
for(int l=0;l<m;l++){
for(auto k:number){
if(number.find(query[l]-k)!=number.end()){
cout << "YES" << endl;
break;
} else {
cout << "NO" << endl;
break;
}
}
}
}
此代码分配数组“查询”,其中m(由用户插入的)堆叠在运行时上的元素。新的C++编译器提供了在运行时为本地变量分配堆栈本身内存的能力。
+0
需要解决的代码中有很多问题。 –
+1
'int query [m];'不会*用一个正常运行的C++编译器编译(除非'm'被定义为'const',而不是在这种情况下)。 –
答
您需要初始化n和m个变量。前两个循环将实际运行。
int main()
{
int n = 3;
int m = 3;
std::set<int> number;
int num;
int query[m];
for(size_t i = 0; i < n; i++)
{
std::cin >> num;
number.insert(num);
}
for(size_t j = 0;j < m; j++)
{
std::cin >> query[j];
}
for(int l=0;l<m;l++)
{
for(auto k : number)
{
if(number.find(query[l]-k)!=number.end())
{
std::cout << "YES" << std::endl;
break;
} else
{
std::cout << "NO" << std::endl;
break;
}
}
}
}
Hmmmm,有人可能想将此情况报告给谷歌,他们没有在那里做了很好的工作... –
米未初始化。查询[m]是未定义的行为。 n未初始化,for循环再次未定义beh –
而且C++语言标准在任何情况下都不支持VLA(可变长度数组)。 –