Problem mit schleifen Ausgabe



  • hmmm das ne idee ja

    wenn ich sie immer dann rein schreib wenn ichs hab dann hab ich auch kein problem mehr mit den abständen und so weil ich einfach eingabe mach (in file schreiben und jeh nach dem leer oder enter) das gut

    und variablen erst definiern wenn ich sie brauch?

    also zum ersten mal benutze
    gut gut mal schaun

    frisch ans werk

    Danke führ diese schon sehr früher Hilfestellung



  • 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 1702130553

    aber 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 mehr

    aber nochmal vielen dank

    😃


Anmelden zum Antworten