2017-04-07 21 views
0

ファイル(area.inp)から配列にデータを読み込むために、次のコードを記述しました。画面にデータを表示すると、最初の "for"ループは正しい数字を表示します(コードはファイルから数字を正しく読み取ります)が、2番目の "for"ループは誤った数字のセットを示します。私はこの問題の周りに頭を浮かべることはできません。私はこの問題に関する指導を感謝します。コメント欄で述べたようにファイルからのデータを配列に格納する

001.000 003.000 
002.000 004.000 
006.000 005.000 
004.000 002.000 
002.000 001.000 

コード

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <algorithm> 
#include <iterator> 


using namespace std; 


int main(int argc, char **argv) 
{ 
    int j=0; 
    double X[j]; 
    double Y[j]; 
    static double *p; 
    double *q; 
    p=X; 
    q=Y; 


//**** Counting the number of lines 

    ifstream myfile("area.inp"); 
    myfile.unsetf(ios_base::skipws); 

    int points = count(
     istream_iterator<char>(myfile), 
     istream_iterator<char>(), 
     '\n'); 

    cout << "Number of data in file: " << points << "\n"; 

//**** Open data file and result 
    cout <<"file is open"<< endl; 
    ifstream infile; 
    infile.open("area.inp", ios::in); 


    cout <<"Reading data from file"<< endl; 
    for (j=0; j<points; j++) 
     { 
      cout << std::setprecision(3) << std::fixed;; 

      infile >> X[j] >> Y[j]; 

      cout << "Value of X["<<j<<"]: " << X[j] << endl; 

      cout << "Value of Y["<<j<<"]: " << Y[j] << endl; 
     } 

    cout <<"Showing numbers stored in array"<< endl; 


      for (j=0; j<points; j++) 
      { 

       cout << "Value of X["<<j<<"]: " << X[j] << endl; 

       cout << "Value of Y["<<j<<"]: " << Y[j] << endl; 
      } 

    infile.close(); 

    return 0; 
} 

Number of data in file: 5 
file is open 
Reading data from file 
Value of X[0]: 1.000 
Value of Y[0]: 3.000 
Value of X[1]: 2.000 
Value of Y[1]: 4.000 
Value of X[2]: 6.000 
Value of Y[2]: 5.000 
Value of X[3]: 4.000 
Value of Y[3]: 2.000 
Value of X[4]: 2.000 
Value of Y[4]: 2.000 
Showing numbers stored in array 
Value of X[0]: 5.000 
Value of Y[0]: 3.000 
Value of X[1]: 2.000 
Value of Y[1]: 4.000 
Value of X[2]: 4.000 
Value of Y[2]: 5.000 
Value of X[3]: 4.000 
Value of Y[3]: 2.000 
Value of X[4]: 2.000 
Value of Y[4]: 2.000 


------------------ 
(program exited with code: 0) 
Press return to continue 
+1

ルックを変更してみてくださいなかった理由。ダブルX [j]; '。 'X'はいくつの要素を格納できますか? – NathanOliver

+1

'j'が定数式でないとき、' double X [j]; 'は標準のC++ではありません。 – crashmstr

答えて

0

をarea.inpは、0の長さの配列を作成しています。 deleteでメモリを解放し、プログラムの最後に

double *X = new double[points]; 
double *Y = new double[points]; 

そして:物事にあなたの方法を行うために、あなたは、ファイル内のポイントの数を数えました後newで配列を割り当てる必要が。

配列を避け、代わりにstd::vectorを使用することをお勧めします。この例では、ポイントを保存するのにstd::pairを使用しますが、変更することはできます。

// Using a vector of pairs 
std::vector<std::pair<double, double>> data; 

ifstream infile; 
infile.open("area.inp"); 
// You should check here to make sure the file opened ok 

// Read the file. No need to know size ahead of time 
std::pair<double, double> tmp; 
while (infile >> tmp.first >> tmp.second) { 
    data.push_back(tmp); 
} 

// Print the results 
std::cout << "Number of pairs: " << data.size() << std::endl; 
for (auto p : data) { 
    std::cout << p.first << ", " << p.second << std::endl; 
} 
0

配列X []とY []のサイズはゼロです。おさるの 何ワンセグ障害が

は、以下のように= 0 'のint jにおける

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <algorithm> 
#include <iterator> 


using namespace std; 


int main(int argc, char **argv) 
{ 
int j=0; 
static double *p; 
double *q; 


//**** Counting the number of lines 

ifstream myfile("area.inp"); 
myfile.unsetf(ios_base::skipws); 

const int points = count(
    istream_iterator<char>(myfile), 
    istream_iterator<char>(), 
    '\n'); 

double X[points]; 
double Y[points]; 
p=X; 
q=Y; 

cout << "Number of data in file: " << points << "\n"; 

//**** Open data file and result 
cout <<"file is open"<< endl; 
ifstream infile; 
infile.open("area.inp", ios::in); 


cout <<"Reading data from file"<< endl; 
for (j=0; j<points; j++) 
    { 
     cout << std::setprecision(3) << std::fixed;; 

     infile >> X[j] >> Y[j]; 

     cout << "Value of X["<<j<<"]: " << X[j] << endl; 

     cout << "Value of Y["<<j<<"]: " << Y[j] << endl; 
    } 

cout <<"Showing numbers stored in array"<< endl; 


     for (j=0; j<points; j++) 
     { 

      cout << "Value of X["<<j<<"]: " << X[j] << endl; 

      cout << "Value of Y["<<j<<"]: " << Y[j] << endl; 
     } 

infile.close(); 

return 0; 
} 
関連する問題