Problem mit schleifen Ausgabe
-
Habs jetzt abgeändert
#include <fstream> #include <iostream> #include <string> #include<vector> using namespace std; int main ( ) { //Name der Datei unter dem sie dann abgespeichert wird string EingabeName; cout << " \n Bitte Name der Datei eingeben \n"; cout << " "; cin >> EingabeName; //Pfad angeben wo datei dann gespeichert wird string pfad; cout << " \n Bitte Pfad eingeben \n"; cout << " "; cin >> pfad; string VTK = ".vtk"; string pfad2 = pfad + EingabeName + VTK; pfad2.c_str(); //steht dann für char ofstream myFile; myFile.open (pfad2.c_str()); if (myFile) { string vtkversion = "# vtk DataFile Version"; string null = ".0"; string space = " "; string enter = "\n"; //Wahl der VTK Version 1, 2 oder 3. int version; cout << " \n Bitte VTK Versionsnummer eingeben \n"; cout << " "; cin >> version; myFile << vtkversion << space << version << null << enter; //Name in der Datei z.B. kurze beschreibung (ohne Leerzeichen)! string ProjektName; cout << " \n Bitte Projekt Namen der Datei eingeben \n"; cout << " "; cin >> ProjektName; myFile << ProjektName << enter; // Wahl zwischen ASCII und BINARY string ASCIIBINARY = ""; int ASCIIBINARYzahl; cout << " \n Bitte zwischen ASCII | BINARY wählen \n"; cout << " \n 1. ASCII "; cout << " \n 2. BINARY "; cout << "\n\n "; cin >> ASCIIBINARYzahl; switch(ASCIIBINARYzahl) { case 1: ASCIIBINARY = ("ASCII"); break; case 2: ASCIIBINARY = ("BINARY"); break; default: // sonst return 0; } myFile << ASCIIBINARY << enter; string dataset = "DATASET"; //DATASET type wählen int Dateieingabe; cout << " \n Bitte Datei Art wählen "; cout << " \n 1. STRUCTURED_POINTS "; cout << " \n 2. STRUCTURED_GRID "; cout << " \n 3. UNSTRUCTURED_GRID "; cout << " \n 4. POLYDATA "; cout << " \n 5. RECTILINEAR_GRID "; cout << " \n 6. FIELD "; cout << "\n\n "; cin >> Dateieingabe; /*Dataset attributes. The number of data items n of each type must match the number of points or cells in the dataset. (If type is FIELD, point and cell data should be omitted. */ string Dataseteingabe; string Datasetattributes[]={"STRUCTURED_POINTS","STRUCTURED_GRID","UNSTRUCTURED_GRID","POLYDATA","RECTILINEAR_GRID","FIELD"}; if(Dateieingabe<=6) Dataseteingabe = Datasetattributes[Dateieingabe-1]; else return 0; myFile << dataset << space << Dataseteingabe << enter; int PolydataZahl; if (Dateieingabe == 4) cout << " \n Bitte POLYDATA wählen "; cout << " \n 1. POINTS "; cout << " \n 2. VERTICES "; cout << " \n 3. LINES "; cout << " \n 4. POLYGONS "; cout << " \n 5. TRIANGLE_STRIPS "; cout << "\n\n "; cin >> PolydataZahl; string polydata; string polytypes[]={"POINTS","VERTICES","LINES","TRIANGLE_STRIPS"}; if(PolydataZahl<=5) polydata = polytypes[PolydataZahl-1]; else return 0; int PointAnzahl; string Pointart; cout << " \n Bitte Anzahl der Points eingeben \n"; cout << " \n "; cin >> PointAnzahl; cout << " \n Bitte Pointart eingeben \n"; cout << "\n "; cin >> Pointart; myFile << polydata << space << PointAnzahl << space << Pointart << enter; /* int x; int i; int array[i]; x = PointAnzahl * 3; cout << "\nJetzt bitte " << x << " " << polydata << " eingeben"; for (i = 0; i <= x ; i++) { cout << "\n"; cin >> array[i]; } for (i=0; i< PointAnzahl; i++) { for (int j = 1; j<=3; j++) { myFile << array[i*3+j] << space; } myFile << endl; } */ myFile.close(); } system("pause"); }der letzte auskommentierte teil der mit der eingabe von array[i] der funktioniert nicht wenns bei der ausführung angelangt istdann stürtzt das programm ab (aber ohne hinweis auf fehler)
nur weis ich nicht warum
-
Da ist ja schon wieder deine VLA-Konstruktion (die immer noch genauso falsch ist wie am Anfang). Und eine Variable anzulegen, nur um sie dann EINMAL auszugeben, halte ich für Verschwendung:
if (myFile) { //Wahl der VTK Version 1, 2 oder 3. int version; cout << " \n Bitte VTK Versionsnummer eingeben \n"; cout << " "; cin >> version; myFile << "# vtk DataFile Version " << version << ".0\n"; ... //DATASET type wählen int Dateieingabe; cout << " \n Bitte Datei Art wählen "; cout << " \n 1. STRUCTURED_POINTS "; cout << " \n 2. STRUCTURED_GRID "; cout << " \n 3. UNSTRUCTURED_GRID "; cout << " \n 4. POLYDATA "; cout << " \n 5. RECTILINEAR_GRID "; cout << " \n 6. FIELD "; cout << "\n\n "; cin >> Dateieingabe; string Datasetattributes[]={"STRUCTURED_POINTS","STRUCTURED_GRID","UNSTRUCTURED_GRID","POLYDATA","RECTILINEAR_GRID","FIELD"}; if(Dateieingabe<=6) myFile<<"DATASET "<<Datasetattributes[Dateieingabe-1]<<"\n"; else return 0; ...(btw, nur eine Kleinigkeit: Gewöhn dir einen vernünftigen Einrückungsstil an, das erleichtert die Lesbarkeit deines Codes)
-
ja ok ich muss mir halt noch einen guten style aneignen naja hoffe das es bisdahin noch geht
und das erste Problem werde ich noch berichtigen aber ich meine das das problem ja hier liegt
int x; int i; int array[i]; x = PointAnzahl * 3; cout << "\nJetzt bitte " << x << " " << polydata << " eingeben"; for (i = 0; i <= x ; i++) { cout << "\n"; cin >> array[i]; } for (i=0; i< PointAnzahl; i++) { for (int j = 1; j<=3; j++) { myFile << array[i*3+j] << space; } myFile << endl; }weil ja bis zu der stelle geht alles
-
SORRY
ICH NEHMS ZURÜCK
ich verbessers
-
GT schrieb:
j...
int i; int array[i];...
Gib's zu: Du willst CStoll in den Wahnsinn treiben....

Ach ja: Als Mitglied kannst Du Deine Posts auch editieren und musst nicht immer neue aufmachen...
Gruß,
Simon2.
-
So jetzt aber
#include <fstream> #include <iostream> #include <string> #include<vector> using namespace std; int main ( ) { //Name der Datei unter dem sie dann abgespeichert wird string EingabeName; cout << " \n Bitte Name der Datei eingeben \n"; cout << " "; cin >> EingabeName; //Pfad angeben wo datei dann gespeichert wird string pfad; cout << " \n Bitte Pfad eingeben \n"; cout << " "; cin >> pfad; string VTK = ".vtk"; string pfad2 = pfad + EingabeName + VTK; pfad2.c_str(); //steht dann für char ofstream myFile; myFile.open (pfad2.c_str()); if (myFile) { string vtkversion = "# vtk DataFile Version"; string null = ".0"; string space = " "; string enter = "\n"; //Wahl der VTK Version 1, 2 oder 3. int version; cout << " \n Bitte VTK Versionsnummer eingeben \n"; cout << " "; cin >> version; myFile << vtkversion << space << version << null << enter; //Name in der Datei z.B. kurze beschreibung (ohne Leerzeichen)! string ProjektName; cout << " \n Bitte Projekt Namen der Datei eingeben \n"; cout << " "; cin >> ProjektName; myFile << ProjektName << enter; // Wahl zwischen ASCII und BINARY string ASCIIBINARY = ""; int ASCIIBINARYzahl; cout << " \n Bitte zwischen ASCII | BINARY wählen \n"; cout << " \n 1. ASCII "; cout << " \n 2. BINARY "; cout << "\n\n "; cin >> ASCIIBINARYzahl; switch(ASCIIBINARYzahl) { case 1: ASCIIBINARY = ("ASCII"); break; case 2: ASCIIBINARY = ("BINARY"); break; default: // sonst return 0; } myFile << ASCIIBINARY << enter; string dataset = "DATASET"; //DATASET type wählen int Dateieingabe; cout << " \n Bitte Datei Art wählen "; cout << " \n 1. STRUCTURED_POINTS "; cout << " \n 2. STRUCTURED_GRID "; cout << " \n 3. UNSTRUCTURED_GRID "; cout << " \n 4. POLYDATA "; cout << " \n 5. RECTILINEAR_GRID "; cout << " \n 6. FIELD "; cout << "\n\n "; cin >> Dateieingabe; /*Dataset attributes. The number of data items n of each type must match the number of points or cells in the dataset. (If type is FIELD, point and cell data should be omitted. */ string Dataseteingabe; string Datasetattributes[]={"STRUCTURED_POINTS","STRUCTURED_GRID","UNSTRUCTURED_GRID","POLYDATA","RECTILINEAR_GRID","FIELD"}; if(Dateieingabe<=6) Dataseteingabe = Datasetattributes[Dateieingabe-1]; else return 0; myFile << dataset << space << Dataseteingabe << enter; int PolydataZahl; if (Dateieingabe == 4) cout << " \n Bitte POLYDATA wählen "; cout << " \n 1. POINTS "; cout << " \n 2. VERTICES "; cout << " \n 3. LINES "; cout << " \n 4. POLYGONS "; cout << " \n 5. TRIANGLE_STRIPS "; cout << "\n\n "; cin >> PolydataZahl; string polydata; string polytypes[]={"POINTS","VERTICES","LINES","TRIANGLE_STRIPS"}; if(PolydataZahl<=5) polydata = polytypes[PolydataZahl-1]; else return 0; int PointAnzahl; string Pointart; cout << " \n Bitte Anzahl der Points eingeben \n"; cout << " \n "; cin >> PointAnzahl; cout << " \n Bitte Pointart eingeben \n"; cout << "\n "; cin >> Pointart; myFile << polydata << space << PointAnzahl << space << Pointart << enter; vector<int> Array; cout << "Bitte Werte eingeben\n"; int ArrayWert; do{ cout << "Wert (999 = Ende der Eingabe):"; cin >> ArrayWert; if(ArrayWert != 999) Array.push_back(ArrayWert); } while(ArrayWert != 999); for (int l=0; l< PointAnzahl; l++) { for (int j = 1; j<=3; j++) { myFile << Array[l*3+j] << space; } myFile << endl; } myFile.close(); } system("pause"); }Aber jetzt wenn ich über einen wert komme dann krieg ich wieder das raus
# vtk DataFile Version 2.0
TEST
ASCII
DATASET POLYDATA
POINTS 8 float
1 1 1
1 1 1
1 1 0
0 0 0
0 0 0
0 0 0
0 1 1
0 0 1702130553aber bei geringen werten nicht
-
ja also nicht wirklich ich bin ihm ja für seine hilfe sehr dankbar
ich habs nur voll verplant das ich des ja schon wie bei dem beispiel jetzt geändert hatte
aber jetzt wie eins drüber das problem hmmmm
-
Die Ausgabeschleife erwartet, daß (mindestens) 3*PointAnzahl Werte in deinem vector stehen - wenn du dich also bei der Eingabe verzählst, erhältst du Müll-Daten (oder einen Zugriffsfehler). Und außerdem hast du da noch einen eins-daneben-Fehler in der Ausgabe - ändere die innere Schleife mal auf 'for(j=0;j<3;++j)'.
-
So ich mach irgendwie immer die selben fehler
for (int j = 0; j<3; j++) <---- da hatte ich wieder <= und 1 statt 0
aber hast du ja gesagt (nur zur eigenstellungnahme)#include <fstream> #include <iostream> #include <string> #include<vector> using namespace std; int main ( ) { //Name der Datei unter dem sie dann abgespeichert wird string EingabeName; cout << " \n Bitte Name der Datei eingeben \n"; cout << " "; cin >> EingabeName; //Pfad angeben wo datei dann gespeichert wird string pfad; cout << " \n Bitte Pfad eingeben \n"; cout << " "; cin >> pfad; string VTK = ".vtk"; string pfad2 = pfad + EingabeName + VTK; pfad2.c_str(); //steht dann für char ofstream myFile; myFile.open (pfad2.c_str()); if (myFile) { string vtkversion = "# vtk DataFile Version"; string null = ".0"; string space = " "; string enter = "\n"; //Wahl der VTK Version 1, 2 oder 3. int version; cout << " \n Bitte VTK Versionsnummer eingeben \n"; cout << " "; cin >> version; myFile << vtkversion << space << version << null << enter; //Name in der Datei z.B. kurze beschreibung (ohne Leerzeichen)! string ProjektName; cout << " \n Bitte Projekt Namen der Datei eingeben \n"; cout << " "; cin >> ProjektName; myFile << ProjektName << enter; // Wahl zwischen ASCII und BINARY string ASCIIBINARY = ""; int ASCIIBINARYzahl; cout << " \n Bitte zwischen ASCII | BINARY wählen \n"; cout << " \n 1. ASCII "; cout << " \n 2. BINARY "; cout << "\n\n "; cin >> ASCIIBINARYzahl; switch(ASCIIBINARYzahl) { case 1: ASCIIBINARY = ("ASCII"); break; case 2: ASCIIBINARY = ("BINARY"); break; default: // sonst return 0; } myFile << ASCIIBINARY << enter; string dataset = "DATASET"; //DATASET type wählen int Dateieingabe; cout << " \n Bitte Datei Art wählen "; cout << " \n 1. STRUCTURED_POINTS "; cout << " \n 2. STRUCTURED_GRID "; cout << " \n 3. UNSTRUCTURED_GRID "; cout << " \n 4. POLYDATA "; cout << " \n 5. RECTILINEAR_GRID "; cout << " \n 6. FIELD "; cout << "\n\n "; cin >> Dateieingabe; /*Dataset attributes. The number of data items n of each type must match the number of points or cells in the dataset. (If type is FIELD, point and cell data should be omitted. */ string Dataseteingabe; string Datasetattributes[]={"STRUCTURED_POINTS","STRUCTURED_GRID","UNSTRUCTURED_GRID","POLYDATA","RECTILINEAR_GRID","FIELD"}; if(Dateieingabe<=6) Dataseteingabe = Datasetattributes[Dateieingabe-1]; else return 0; myFile << dataset << space << Dataseteingabe << enter; int PolydataZahl; if (Dateieingabe == 4) cout << " \n Bitte POLYDATA wählen "; cout << " \n 1. POINTS "; cout << " \n 2. VERTICES "; cout << " \n 3. LINES "; cout << " \n 4. POLYGONS "; cout << " \n 5. TRIANGLE_STRIPS "; cout << "\n\n "; cin >> PolydataZahl; string polydata; string polytypes[]={"POINTS","VERTICES","LINES","TRIANGLE_STRIPS"}; if(PolydataZahl<=5) polydata = polytypes[PolydataZahl-1]; else return 0; int PointAnzahl; string Pointart; cout << " \n Bitte Anzahl der Points eingeben \n"; cout << " \n "; cin >> PointAnzahl; cout << " \n Bitte Pointart eingeben \n"; cout << "\n "; cin >> Pointart; myFile << polydata << space << PointAnzahl << space << Pointart << enter; vector<int> Array; cout << "Bitte Werte eingeben\n"; int ArrayWert; do{ cout << "Wert (999 = Ende der Eingabe):"; cin >> ArrayWert; if(ArrayWert != 999) Array.push_back(ArrayWert); } while(ArrayWert != 999); for (int l=0; l< PointAnzahl; l++) { for (int j = 0; j<3; j++) { myFile << Array[l*3+j] << space; } myFile << endl; } myFile.close(); } system("pause"); }So gehts
ok da ich ja mülldaten krieg was vollkommen stimmt was ich auch weis wär jetzt meine frage wie ich das verhinder
weil bei meinem anfänglichen Programm hat die eingabe aufforderung ja aufgehört nachdem man den eingabewert mal 3 erreicht hatte da war aber das mit dem array[i]
kann ich des so wie ichs am anfang gamacht hab auch bei der vektor sache einsetzen?
-
Ja, kannst du machen - du mußt nur vor der Eingabeschleife den vector ausreichend vergrößern:
vector<int> Array(3*PointAnzahl); cout << "Bitte Werte eingeben\n"; for(int i=0;i<3*PointAnzahl;++i) cin>>Array[i];(alternativ kannst du auch deine Eingabeschleife nutzen und den vector anschließend resize()n:
vector<int> Array; cout << "Bitte Werte eingeben\n"; int wert; do { cin>>wert; if(wert!=999)Array.push_back(wert); } while(wert!=999 && Array.size()<3*PointAnzahl/*mehr Werte als Punkte brauchst du nicht*/); Array.resize(3*PointAnzahl);//füllt die nicht eingegebenen Punkte mit Nullen auf
-
Perfekt
DANKE so klapt das super
naja mal sehn ob ich weekend noch was mach oder so aber heute erstmal nicht mehraber nochmal vielen dank
