2016-12-02 3 views
0

Ich habe eine Datei mit X- und Y-Koordinaten und versuche, die X-Koordinaten in ein einzelnes 1D-Array und die Y-Koordinaten in ein anderes 1D-Array einzugeben.Geben Sie Koordinaten in zwei separate Arrays von Dateifehler ein

Die Datendatei ist in folgendem Format

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

Die Datei sieht wie folgt aus. Dies ist nur ein kleiner Teil der Datei, da uns nie mehr als 5.000 Punkte gegeben werden.

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 

Bisher habe ich den folgenden Code bereits beendet:

#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; 

} 

ich den Inhalt meiner Array ausgegeben, nur um sicher zu stellen, dass sie richtig eingegeben wurden und für die x_coordinate Array, erhielt ich die folgende Ausgang:

-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 

Und für die y_coordinate Array ich folgende Ausgabe:

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 

Ist etwas falsch in meinen Fin-Statements? Was kann ich tun, um es zu beheben und jede andere 0 in den Arrays loszuwerden. Ich bin ein Anfänger Programmierer und es dauert eine lange Zeit, um herauszufinden, was ich falsch mache. Jede Hilfe wäre willkommen. Vielen Dank!

+0

Wenn Ihre Datei aus x- und y-Koordinaten besteht, warum lesen Sie in 'points [count]'? –

+0

Wir werden alle Punkte in einem Array für einen späteren Teil des Programms benötigen. Meine einzige Sorge im Moment ist das Sortieren der x- und y-Koordinaten in ihre eigenen separaten Arrays. –

+0

Aber wenn Sie etwas in 'Punkte' lesen, dann können Sie es auch nicht in' x_koordinate' oder 'y_koordinate' lesen. Sie könnten * es von 'Punkten' in beide kopieren, aber Sie können es nicht erneut lesen. –

Antwort

0

Wenn Sie alle den Wert müssen in gehen pointsund haben diese Werte aufgebrochen zwischen x_coordinate und y_coordinate, dann so etwas wie dies würde für Ihre Schleife Körper tun:

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

Wenn Sie onl Sie brauchen sie in die coordinate Arrays zu gehen, ersetzen points[count] durch eine einfache double Variable, wo immer es verwendet wird.

+0

Vielen Dank! Das hat mir sehr geholfen! –

0

Eine schnelle Lösung:

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

Z.B. Wenn Sie den dritten Wert count=2, also count % 2 == 0 und count/2 == 1 lesen, ist es x_coordinate[1].

Aktualisierung. Bemerkte die seltsame Sache mit fin >> points[count]. Ich würde folgendes tun:

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

Der vollständige Code (klar sein):

#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

Ich habe versucht, das zu tun und ausgegeben die x_coordinate Array nur um sicher zu sein, aber ich endete mit der folgenden Ausgabe auf: -0,57121 0,751731 0,646427 0,871841 -0,164663 -0,653433 –

+0

die Antwort aktualisiert. –

Verwandte Themen