从文件输入C ++定义全局变量

时间:2014-08-27 13:49:22

标签: c++ file-io initialization

我必须在我的C ++代码中定义一个全局数组,其大小必须从文件中读取。我使用以下代码

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

string inputfile = "input.txt";
ifstream infile(inputfile.c_str());
infile>>N; // N = size of Array
int array[N];

// ------some code here-----

int main(){
int N;
cout << N<<endl;
return 0;
}

但如果我放置3行

string inputfile = "input.txt";
ifstream infile(inputfile.c_str());
infile>>N; // N = size of Array

在主循环内部,此代码可以正常工作。不幸的是我不能把它放在任何函数中,因为我需要从变量N初始化一个全局数组。

我问了很多人并搜索了不同的地方,但我似乎无法弄清楚这一点。谢谢你的帮助。

3 个答案:

答案 0 :(得分:6)

数组的大小必须是常量表达式,即在编译时已知。

从文件中读取值是一种固有的动态操作,它在运行时发生。

一种选择是使用动态分配:

int array_size()
{
  int n;
  ifstream infile("input.txt");
  if (infile>>n)
    return n;
  else
    throw std::runtime_error("Cannot read size from file");
}
int* array = new int[array_size()];

但最好用std::vector<int>替换可以动态调整大小的数组。

答案 1 :(得分:2)

使用全局指针。定义

int* array;

在主程序之前的全局空间中。然后,在循环或不循环中,说

array = new int[N];

分配你的数组。只记得也说

delete[] array;
退出main或重新分配array

之前

答案 2 :(得分:1)

int array[N]; - N应该在编译时知道 相反,请使用int array[]=new int[N]; /*some code using array*/ delete[] array;

int *array;

int main(){
    ifstream infile("input.txt");
    unsigned N;
    infile>>N;
    array=new int[N];

    //using array...

    delete[] array; //when no longer needed.
                   //don't use array after this line
                  //unless it's array=new int[] instruction
                 //or you know what you're doing.
}