程序卡在循环中

时间:2016-03-29 06:38:32

标签: c++ loops for-loop

我有一个非常简单的程序,如下所示。我已插入cout来知道哪一行被执行。

int main(void) {
  int n_in = 0;
  int keys = 0;
  cin>>n_in;
  long long in_array[n_in];

  for(int i=0; i<n_in; i++){
    cin>>in_array[i];
  }
  cout<<"Executed"; 
  cin>>keys;
  cout<<"Executed"<<" "<<keys;
  int index[keys];
  long long key_array[keys];
  cout<<"Executed";
  for(int j=0; j<keys; j++){
    cin>>key_array[j];
    cout<<"Iteration" <<j<<"complete" ;
  }
  cout<<"Executed";
  //bin_search(in_array, n_in, key_array, keys, index);

  for(int i=0; i<keys; i++){
    cout<<index[i]<<" " ;
  }
  return 0;

}

截图给出了:

enter image description here

从图像中可以看出,最后一次迭代永远不会完成,我不知道为什么。 iteration0complete等之后的数字是输入。

有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:1)

以下是您的代码的修改版本,正如我在vectors arrays index[]中使用的注释中所述,因为您可以在不知道其大小的情况下使用向量,这与声明的相反数组,在编译时编译器必须知道数组的大小,但是你定义了一个数组,你给它一个在编译时不是常量的大小,我评论了你使用数组的代码部分{{1因为我不知道为什么你要打印数组有什么,虽然它是空的,你只是声明它里面没有任何内容。

这里的代码希望它满足您的需求。

#include<string>
#include<vector>
#include<iostream>



using namespace std;


int main(){


    int n_in = 0;
  int keys = 0;
  cin>>n_in;
  vector<long long> in_array;

  for(int i=0; i<n_in; i++){
      int k =0;
      cin >> k;

    in_array.push_back(k);
  }
  cout<<"Executed"; 
  cin>>keys;
  cout<<"Executed"<<" "<<keys;

  vector<int> index;
  vector<long long> key_array;
  cout<<"Executed";

  for(int j=0; j<keys; j++){
      int p =0;

    cin>>p ;
        key_array.push_back(p);
    cout<<"Iteration" <<j<<"complete" ;
  }
  cout<<"Executed";
  //bin_search(in_array, n_in, key_array, keys, index);

  /*for(int i=0; i<keys; i++){
      int m =0;

    cout<<index[i]<<" " ;
  }
*/

    return 0;
}

修改 您在注释中所说的内容在C中是正确的,但在c ++中编译器需要在编译时具有该数组的确切大小,否则您将不得不使用new运算符来动态分配内存。

例如:

int MyArray[5]; // correct

const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct

int ArraySize = 5;
int MyArray[ArraySize]; // incorrect

总结一下:

数组的元素数必须是常量表达式。如果需要变量边界,请使用向量。