Konvertierung von txt in eine array funktioniert nicht

nun das problem mit dem minimum habe ich soweit im griff indem ich die erste zeile per boolscher variable auf true gesetzt habe , und mit dem zählen einfach bei der zweiten spalte beginne, aber sonst probleme über probleme.... auch der nächste schritt klappt nicht wo er dann in der zeile mit dem spaltenvektor weiter nach einem minimum suchen sollte und die indizes dann als array asugeben sollte hier einfach mal der fertige code wie das fertige programm laufen sollte
C++:
#include <iostream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;


int main()
{
    double xPoint[6];
    double yPoint[6];



    for (int i = 0; i < 5; i++)
    {
        cout << "Enter the x coordinate for position" << i << ": ";
        cin >> xPoint[i];
        cout << "Enter the y coordinate for position" << i << ": ";
        cin >> yPoint[i];
        cout << string(50, '\n');
    }

    double myArray[5][5];

    for (int k = 0; k < 5; k++)
    {
        for (int j = 0; j < 5; j++)
        {
            double X = sqrt(pow(xPoint[k] - xPoint[j], 2) + pow(yPoint[k] - yPoint[j], 2));
            if (X==0)
                {
                X=100;
                }
            myArray[k][j] = X;
            cout << X << " ";
        }
        cout << endl;
    }
    //Travelling salesmen
    float min[6];
    int spalte = 0;


     bool zeile=true;
     zeile= k==0;

    for(int j = 1; j < 5; j++) {
       double minimum =2;
        if(minimum > myArray[0][j]) {
            minimum = myArray[0][j];
            spalte = j;
        }
        min[0] = minimum;
    }
    for (int j=0;j<1;j++)
    {
        cout << "Minimum der ersten Zeile :min[" << spalte <<"]" << endl;
        cout << min[0] <<endl;

    }

{
for (n=1;n<5;n++)
{
    
}

bool zwei=true;
      zwei= k==spalte;
      for(int j = 1; j < 5; j++) {
       double minimum =2;
        if(minimum > myArray[0][j]) {
            minimum = myArray[0][j];
            spalte = j;
        }
        min[2] = minimum;
    }
    for (int j=0;j<1;j++)
    {
        cout << "Minimum der ersten Zeile :min[" << spalte <<"]" << endl;
        cout << min[2] <<endl;
    }

}
}
 
Zuletzt bearbeitet von einem Moderator:
Nein, das Problem ist, dass du minimum immer wieder auf 10000 gesetzt hast, sodass du min[0] immer überschrieben hast.
Nimm die Deklaration von minimum aus der Schlaufe raus (setze es vor die Schlaufe) und es sollte gehen.

Gruss
cwriter
 
Einlesen von Zahlen aus TXT und konvertieren - Programm bricht nach erster Spalte ab

Hallo,

ich lesen mir Zahlen aus einer TXT Datei ein und konvertiere sie mir dann mit Integer da ich diese Werte als Input für eine Matrix brauche.... problem : wenn ich das file als string einlese werden alle drei spalten der TXT datei wiedergegeben, sobald ich allerdings ATOI anwende nur mehr eine spalte

C++:
#include <iostream>
#include <fstream>
#include<cstdlib>


using namespace std;


int main(int argc, char *argv[])
{
    char     filename[128];
    ifstream file;
    char     zeile[1024];


    // Dateinamen einlesen
    cout << "Dateinamen eingeben: " << flush;
    cin.getline(filename, 127);


    
    file.open(filename, ios::in);


    if (file.good())
    {
        


        
        file.seekg(0L, ios::beg);


        while (! file.eof())
        {
            
            file.getline(zeile, 10000);
            int value =atoi(zeile);
            cout << value << endl;
        }
    }
    else
    {
        
        
        cout << "Datei nicht gefunden." << endl;
    }


    return 0;
}
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Hallo,

"atoi" wird dir auch nur immer die erste Zahl aus jeder Zeile konvertieren. Wenn du alle haben willst musst du jede Zeile noch einmal anhand ihrer Leerzeichen auf einzelne Spalten auftrennen und dann für jede Spalte jeder Zeile atoi aufrufen.

Gruß,
Wolf
 
"atoi" wird dir auch nur immer die erste Zahl aus jeder Zeile konvertieren. Wenn du alle haben willst musst du jede Zeile noch einmal anhand ihrer Leerzeichen auf einzelne Spalten auftrennen und dann für jede Spalte jeder Zeile atoi aufrufen.
Genau. Und das Auftrennen kannst du mit einem istringstream bewerkstelligen.

Und du solltest (fast) nie die good, eof, bad, fail Methoden eines Streams aufrufen. [das funktioniert nämlich nicht so einfach]

Und verwende lieber die getline Funktion für std::strings (ist einfacher).

Und atoi ist auch schlecht, da diese Funktion keine Fehler prüfen kann, sondern einfach 0 zurückgibt - ob da nun 0 stand oder nicht.
C++:
file.open(...);

if (file.is_open()) {
  string zeile;
  while (getline(file, zeile)) {
    istringstream row(zeile);
    int wert;
    while (row >> wert) {
       ... // Hurra! Wert eingelesen...

    }
  } else {
    // datei nicht gefunden / keine Berechtigung zum Öffnen etc.
  }
}
 
Das problem ist das ich mit diesen Daten weiterrechnen muss und daher auf ATOI angewiesen bin , da ich mit strings keine Rechnungen machen kann sondern nur mit Integer zahlen in meinem Fall!! Daher muss ich mit ATOI den Input von char auf int konvertieren!!
 
Zuletzt bearbeitet:
anyway habe stringstream in meinen code eingebaut, problem bleibt aber gleich, er liest nur eine spalte
C++:
#include <iostream>
#include <fstream>
#include<cstdlib>
#include<sstream>
using namespace std;

int main(int argc, char *argv[])
{
    char     filename[128];
    ifstream file;
    char     zeile[1024];

    // Dateinamen einlesen
    cout << "Dateinamen eingeben: " << flush;
    cin.getline(filename, 127);

    // Datei öffnen
    file.open(filename, ios::in);

    if (file.good())
    {
        // Wenn die Datei geoeffnet werden konnte...

        // An den Anfang der Datei springen
        file.seekg(0L, ios::beg);

        while (! file.eof())
        {
            // Die Datei zeilenweise auslesen
            file.getline(zeile, 10000);
             istringstream row(zeile);
            int value =atoi(zeile);
            cout << value << endl;
        }
    }
    else
    {
        // Wenn die Datei nicht geoeffnet werden konnte,
        // aus welchen Gruenden auch immer...
        cout << "Datei nicht gefunden." << endl;
    }

    return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück