2012-03-13 18 views
1

my関数の出力が矛盾しています。この関数は、ファイルを開いてファイルから整数を抽出し、その整数を配列に設定することを想定しています。私は20の整数がある場合、ファイルから配列への抽出に問題があります。私がこれをしようとすると、私は "配列は範囲外です"と思っています。IOファイルコードが矛盾しています

この関数は、ファイル名が正しくないか、ファイルがそのコンテキスト内に整数を持たない場合にも、プロンプトを表示すると仮定しています。どちらも正しく動作しているようです。

ご協力いただければ幸いです。

bool loadArrayFromFile(int a[], int &n) 
{ 
ifstream infile; 
string fileName; 
cout<<"Enter the name of file: "; 
cin>>fileName; 
infile.open(fileName.c_str()); 
if(!infile) 
{ 
    cout<<"File didn't open"<<endl; //if file name is incorrect or could not be opened 
    return false; 
} 
int count=0; //count values in file 
int elem=0; //keeps track of elements 
infile>>a[elem]; 
while(infile.good()) 
{ 
    elem++; 
    count++; 
    infile>>a[elem]; 
} 
if(!infile.eof()) 
{ 
    cout<<"Wrong datatype in file"<<endl; 
    infile.clear(); 
    infile.close(); 
    return false; 
} 
n=count; 
infile.close(); 
return true; 
} 
+0

プログラムがコードを調べると、自動的にベクトル化されると言われました。だから、私はそれをベクトル化したのです。 – user1188766

答えて

1

あなたの問題の説明は、あまりにも少ない要素しか持たない配列を与えたように聞こえます。 std::vector<int>を使用して要素を読み込むことができます(例:

std::vector<int> array; 
array.assign(std::istream_iterator<int>(infile), std::istream_iterator<int>()); 
+0

プログラムがコードを見て、それを自動的にベクトル化するとき、私は言われました。だから、私はそれをベクトル化したのです。 – user1188766

+0

私はベクトルをC++で使う方法を学んでいません – user1188766

+0

'std :: vector 'と「ベクトル化」を使用することは全く異なる2つの概念です!後者は、一度に複数の値を処理する特定のCPU操作の使用に適用され、リソース割り当てとは関係ありません。 –