Konvertierung von txt in eine array funktioniert nicht

Einlesen aus txt in ein array c++/ Array wird nicht angezeigt

Hallo,
ich habe folgenden Code mit dem ich aus einer TXT datei daten einlese und dann in ein Array abspeichern möchte, das problem ist das das porgramm zwar läuft aber das Array nicht ausgeführt wird
C++:
#include<iostream>
#include<fstream>
using namespace std;

int main()
{

    ifstream datei;
    datei.open("vrpnc01.txt");
    char c= datei.get();
    while(datei.good()){std::cout<<c;
    c=datei.get();}

    {
          int a[400][400];
        int i;
        int j;
        for ( int i=0;i<100;i++)
        {
            for ( int j=0;j<100;j++)
            a[i][j]=0;
            cout<<a[i][j]<<'\n';
      }
          return 0;

            }
    datei.close();

    return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Hi.
Hallo,
ich habe folgenden Code mit dem ich aus einer TXT datei daten einlese und dann in ein Array abspeichern möchte, das problem ist das das porgramm zwar läuft aber das Array nicht ausgeführt wird
Dein Programm liest die Datei aus, Zeichen für Zeichen. Und macht mit dem Zeichen... NICHTS. Du müßtest das Zeichen auch in das Array speichern usw.

Gewöhne dir einen besseren Stil an. Dein Programm ist unleserlich - was dazu führt das es sich keiner durchliest. Eine Anweisung pro Zeile, rücke ordentlich ein, verwende Leerzeichen; das erhöht die Lesbarkeit.

Dann gibt die .get() Funktion einen int zurück, keinen char. Wenn nichts eingelesen werden konnte, gibt die Funktion fstream::traits_type::eof() zurück.
 
Code:
cout<<a[i][j]<<'\n';
im Code wäre an sich dazu gedacht das Array auszugeben, meine Frage ist warum
Code:
cout<<a[i][j]<<'\n';
im Ausgabe Bildschirm kein Array sondern nur eingelesenen Zahlen ausgibt!zu den Zeilen
Code:
for ( int j=0;j<100;j++);
             matrix[i][j];
            cout<< matrix[i][j];

gibt er ein Warning aus, dass diese Zeilen ohne Wirkung sind. Und genau das verstehe ich nicht und wie kann man dieses ändern******

Was ich gerne möchte ist das hier
Code:
for ( int j=0;j<100;j++);
             matrix[i][j];
            cout<< matrix[i][j]=datei;
      }

also das er datei , den datenstrom direkt in die Matrix schreibt
 
Zuletzt bearbeitet:
Moin,

Code:
cout<<a[i][j]<<'\n';
im Code wäre an sich dazu gedacht das Array auszugeben, meine Frage ist warum
Code:
cout<<a[i][j]<<'\n';
im Ausgabe Bildschirm kein Array sondern nur eingelesenen Zahlen ausgibt!zu den Zeilen
a[i][j] ist halt der Wert an der Stelle "i,j" ... was sollte da sonst ausgegeben werden ?

Code:
for ( int j=0;j<100;j++);
             matrix[i][j];
            cout<< matrix[i][j];

gibt er ein Warning aus, dass diese Zeilen ohne Wirkung sind. Und genau das verstehe ich nicht und wie kann man dieses ändern******
Richtig .... Du darfst die erste Zeile NICHT mit einem Semikolon abschließen, weil dies den Befehl beendet !!
Java:
for ( int j=0;j<100;j++)
{
     matrix[i][j];  // wobei dies hier auch keine Sinn macht - willst Du hier die Matrix füllen ****?
}
cout<< matrix[i][j];

Was ich gerne möchte ist das hier
Code:
for ( int j=0;j<100;j++);
             matrix[i][j];
            cout<< matrix[i][j]=datei;
      }

also das er datei , den datenstrom direkt in die Matrix schreibt
Dein matrix[i][j] bezeichnet genau einen Wert des Arrays (eben an der Stelle i,j).
Da kannst Du wohl kaum die gesamte Datei rein schrieben ....
Was steht denn überhaupt in der Datei drin ?

Gruß
Klaus
 
Der inhalt der Datei sind Zahlen
Code:
 30 40
 37 52 7
 49 49 30
 52 64 16
 20 26 9
 40 30 21
 21 47 15
 17 63 19
 31 62 23
 52 33 11
 51 21 5
 42 41 19
 31 32 29
 5 25 23
 12 42 21
 36 16 10
 52 41 15
 27 23 3
 17 33 41
 13 13 9
 57 58 28
 62 42 8
 42 57 8
 16 57 16
mit Matrix [i][j] würde ich gerne die Matrix füllen, bin aber mittlerweile eher in der Richtung unterwegs das ganze direkt mit datei.get zu machen, nur was müsste ich dann in die klammer bei datei,get schreiben damit der das ganze direkt einliest? brauch ich da eine schleife ****

Die aktuelle Version meines programms sieht so aus
C++:
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    int array [6][70];

    ifstream datei;
    datei.open("vrpnc01.txt");
    char c= datei.get(array,6,70);

    while(datei.good())
    {std::cout<<c;
    c=datei.get();

    }

    datei.close();

    return 0;
}
nur funktioniert zeile char c=datei.get(array,6,70) nicht da produziert er einen fehler no matching found:(


edit:
problem mittlerweile offline gelöst.... habe die werte in einen Vektor gegeben mit einem code den ich gefunden habe
DANKE AN ALLE FÜR DIE MITHILFE!


edit2: Die Werte will ich jetzt in ein Array abspeichern und das Array dann anzeigen ,das sind dann die x werte , dann will ich nachher die y werte einlesen und diese in ein zweites Array abspeichern oder was noch besser wäre erst x werte einlesen, dann y werte einlesen und das ganze in einer matrix speichern... wie muss ich meinen code dafür weiterschreiben... kriege es nicht hin dass er mit die eingelesenen werte in ein Array speichert . wenn geht bitte direkt in den Code schreiben und Code reposten DANKE und schönen Sonntag
C++:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

int main()

{
   // Endlosschleife

   for(;;)
   {
      // eine weitere Zahl einlesen
      int nValue = 0;
      cout << "Geben Sie die naechste Zahl ein: ";
      cin  >> nValue;


      // wenn sie negativ ist ...
      if (nValue <0)

      {
         // ... dann Schleife abbrechen
         break;
         return 0;
}

}
 }
 
Zuletzt bearbeitet von einem Moderator:
ich arbeite,das mit dem array haut schon hin
C++:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;



int main()

{
   // Endlosschleife

   for(int i=0;i<200;i++)
   {
      // eine weitere Zahl einlesen
      int nValue = 0;
      int Array[200];
      cout << "Geben Sie die naechste Zahl ein: ";
      cin  >> nValue;


      // wenn sie negativ ist ...
      if (nValue <0)

      {
         // ... dann Schleife abbrechen
         break;

}
Array[i]=nValue;
for (int i=0;i<200;i++)
{
    cout<<i<<":"<<Array[i]<<endl;
}
}
 }
nur wie mache ich es dass er das ganze nochmal für zweite werte macht****?
kann ich dann auch etwa die differenz zwischen wert 7 und wert 3 bilden und anzeigen****?was ich probiert habe war copy and paste und die eingabeschleife mit k nochmal laufen lassen und k ausgeben ... geht aber nicht:(
 
Zuletzt bearbeitet:
Du musst deinen Code besser einrücken, dann fällt es uns beim Lesen leichter und vor allem auch dir beim Schreiben.
Das Array musst du auserhalb der Schleife erstellen. Sonst wird es für jeden Schleifendurchlauf neu erstellt.

Für die X- und Y-Werte würde ich dir ein 2-dimensionales Array vorschlagen. Falls du nicht weißt wie das funktioniert, einfach schnell mal googlen.

Pseudobeispiel:
C++:
#include <iostream>

using namespace std;

int main()
{
    const int MAX = 200;
    const int X = 0;    // Konstanten um den Arrayzugriff lesbarer zu machen
    const int Y = 1;
    int values[2][MAX];
    int numOfValues = 0;

    for (int i = 0; i < MAX; i++)
    {
        // x eingeben
        values[X][i] = eingabeX;
        // y eingeben
        values[Y][i] = eingabeY;
    }

    //differenz zwischen 3. und 7. X-Wert
    int diff = values[X][3] - values[X][7];

    return 0;
}
 
Probleme beim Anzeigen eines Vekors

hallo,
Wie bringe ich das programm dazu nach 5 werten eine neue spalte zu beginnen**** lg grüsse
C++:
#include <iostream>
#include<cmath>
#include<vector>
using namespace std;

 int main()
 {
     double xPoint[6];
     double yPoint[6];
       std::vector<float> v;


     for (int i=0;i<5;i++)
     {
         cout<<"Enter the x coordinate for position"<<i<<":"<<endl;
         cin>>xPoint[i];
         cout<<"Enter the y coordinate for position"<<i<<":"<<endl;
         cin>>yPoint[i];
     }
       for (int k=0;k<5;k++)
      {


      for (int i=0;i<6;i++)

         {
              double X =sqrt(pow(xPoint[0+k]-xPoint[i],2)+pow(yPoint[0+k]-yPoint[i],2));




             cout<<X<<" ";

             cout<<endl;
         }
for (i=0; i<1; ++i) {
    for( int j=0; j<5;++j)
        v.push_back(i); 
    }
}
     }
 
Zuletzt bearbeitet von einem Moderator:
Überlege mal. Wenn du (std::)endl in cout schiebst, wird ein Zeilenumbruch eingesetzt. Im Moment setzt du den nach jedem einzelnen Wert ein.

Wo müsste das stehen, damit das nur alle 5 Zeichen einen Zeilenumbruch einsetzt?


BTW, du hast da noch einen Fehler in der For-Schleife mit I, das sollte wahrscheinlich auch 5 als oberer Wert sein (wie bei k).

Die xPoint und yPoint-Arrays sind auch eins zu groß. Wenn du 5 Koordinaten angibst, dann sind die über die Indizes 0 bis 4 erreichbar.
 

Neue Beiträge

Zurück