2016-12-02 9 views
0

x座標とy座標を持つファイルがあり、x座標を単一の1D配列に、y座標を別の1D配列に入力しようとしています。ファイルの問題から2つの別々の配列に座標を入力します

データファイルには、次の形式のファイルは、次のようになります

(x coordinate)(y coordinate) 
(x coordinate)(y coordinate) 
(x coordinate)(y coordinate) (x coordinate)(y coordinate) 
(x coordinate)(y coordinate) (x coordinate)(y coordinate) 

です。これはファイルのほんの一部ですが、5,000ポイント以上のものは何も与えられません。

5.675207 -0.571210 
0.728926 0.666069 
2.290909 0.751731 2.004545 0.907396 
0.702893 0.646427 5.909504 -0.365045 
2.082645 0.871841 5.597107 -0.633507 
6.117769 -0.164663 6.091736 -0.190282 
5.571074 -0.653433 4.503719 -0.978307 
3.983058 -0.745620 
3.670661 -0.504729 
5.857438 -0.413001 

は、これまでのところ私は、次のコードは、すでに終了している:

#define _CRT_NONSTDC_NO_DEPRECATE 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main(int argc, char * argv[]) 
{ 

int count = 0; 
ifstream fin; 
ofstream fout; 
double points[5000]; 
double x_coordinate[5000] = { 0 }; 
double y_coordinate[5000] = { 0 }; 

if (argc < 3) 
{ 
    cout << "Incorrect usage: prog.exe filenname number" << endl; 
    cout << "Exiting now, please try again." << endl; 
    return -1; 
} 

fin.open(argv[1]); 
if (!fin) 
{ 
    cout << "Error opening file \"" << argv[1] << "\", exiting." << endl; 
    return -1; 
} 

fout.open(argv[2]); 

while (fin >> points[count]) 
{ 
    if (count % 2 == 0) 
    { 
     fin >> x_coordinate[count]; 
    } 
    else 
    { 
     fin >> y_coordinate[count]; 
    } 
    count++; 
} 

fin.close(); 
fout.close(); 

return 0; 

} 

は私はちょうど彼らが正しく入力されたことを確認するために私の配列の内容を出力し、x_coordinateアレイに対して、私が受け取った次出力:

-0.57121 0 0.751731 0 0.646427 0 0.871841 0 -0.164663 0 -0.653433 0 -0.74562 0 -0.413001 0 0.990358 0 -0.892387 0 -0.77929 0 0.835618 0 -0.999672 0 0.129798 0 -0.340688 0 -0.728578 0 -0.388408 0 0.420644 0 0.999065 0 0.556654 0 -0.435838 0 -0.779798 0 -0.710501 0 0.995461 0 -0.138933 0 0.875928 0 -0.972772 0 -0.527719 0 0.956751 0 0.372859 0 -0.987763 0 0.845169 0 -0.613152 0 0.703984 

そして、私は次の出力を得るy_coordinateアレイ用:

0 0.666069 0 0.907396 0 -0.365045 0 -0.633507 0 -0.190282 0 -0.978307 0 -0.504729 0 0.858796 0 -0.994541 0 -0.459839 0 0.849633 0 -0.996983 0 -0.99692 0 0.599134 0 0.93742 0 -0.983368 0 -0.63288 0 0.976531 0 0.34858 0 0.103944 0 -0.240329 0 0.961729 0 -0.914335 0 0.768643 0 -0.112302 0 -0.672316 0 0.954271 0 -0.89202 0 0.181224 0 0.785033 0 0.356447 0 0.467288 0 0.474704 0 -0.728022 

私のフィンステートメントに何か問題がありますか?それを修正し、配列内の他のすべての0を取り除くために何ができるでしょうか。私は初心者のプログラマーであり、私が間違っていることを理解するのに長い時間がかかります。どんな助けもありがとう。ありがとうございました!

+0

あなたのファイルがx座標とy座標で構成されている場合、なぜあなたは 'points [count]'を読んでいますか? –

+0

プログラムの後半部分では、配列内のすべてのポイントが必要になります。私の唯一の懸念は、現在、x座標とy座標を別々の配列にソートすることです。 –

+0

しかし、あなたが 'points'に何かを読んだら、' x_coordinate'か 'y_coordinate'のどちらにも読み込むことはできません。あなたは 'points'からそれらのいずれかにコピーすることができますが、あなたはそれを再度読むことはできません。 –

答えて

0

あなたはpointsに入る値のすべてが必要な場合は、これらの値はx_coordinateの間で分割していますそしてy_coordinate、その後、このような何かがあなたのループ本体のために行うだろう:

if (count % 2 == 0) 
{ 
    x_coordinate[count/2] = points[count]; 
} 
else 
{ 
    y_coordinate[count/2] = points[count]; 
} 
count++; 

あなたはONLの場合coordinate配列に入る必要がある場合は、points[count]をどこでも簡単にdoubleという変数に置き換えてください。

+0

ありがとうございました!それが本当に助けになりました! –

0

クイックフィックス:例えば

if (count % 2 == 0) 
{ 
    fin >> x_coordinate[count/2]; 
} 
else 
{ 
    fin >> y_coordinate[count/2]; 
} 
count++; 

第3の値count=2を読み取っているときは、count % 2 == 0count/2 == 1なので、それはx_coordinate[1]です。

更新。奇妙なことを気づいたfin >> points[count]。私は、次の操作を行います:

while (fin >> x_coordinate[count]) { 
    fin >> y_coordinate[count]; 
    count++; 
} 

フルコード(明確にする):

#define _CRT_NONSTDC_NO_DEPRECATE 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main(int argc, char * argv[]) 
{ 

ifstream fin; 
ofstream fout; 
double x_coordinate[5000] = {}; // is enough to zeroify, but is it necessary? 
double y_coordinate[5000] = {}; 

if (argc < 3) 
{ 
    cout << "Incorrect usage: prog.exe filenname number" << endl; 
    cout << "Exiting now, please try again." << endl; 
    return 1; // usually only small non-negative numbers like 0-127 are valid 
} 

fin.open(argv[1]); 
if (!fin) 
{ 
    cout << "Error opening file \"" << argv[1] << "\", exiting." << endl; 
    return 1; 
} 

fout.open(argv[2]); 
if (!fout) // also needed 
{ 
    cout << "Error opening file \"" << argv[2] << "\", exiting." << endl; 
    return 1; 
} 

int count = 0; // declaration closer to the place where the variable is used 
while (fin >> x_coordinate[count]) { 
    fin >> y_coordinate[count]; 
    count++; 
} 

for (int i = 0; i < count; i++) { 
    fout << x_coordinate[i] << ' ' << y_coordinate[i] << endl; 
} 

fin.close(); 
fout.close(); 

return 0; 

} 
+0

私はそれをやってみましたし、念のためにx_coordinate配列を出力しますが、私は次のような出力になってしまった:答えを更新しました-0.57121 0.751731 0.646427 0.871841 -0.164663 -0.653433 –

+0

。 –

関連する問題