2016-11-01 8 views
0

Ich schreibe diesen Code, wo ich ein zweidimensionales Array mit Informationen aus einer Datei füllen. Hier ist die Datei:Hinzufügen von Elementen zu einem zweidimensionalen Array C++

5 

Franks,Tom 2 3 8 3 6 3 5 

Gates,Bill 8 8 3 0 8 2 0 

Jordan,Michael 9 10 4 7 0 0 0 

Bush,George 5 6 5 6 5 6 5 

Heinke,Lonnie 7 3 8 7 2 5 7 

nun die Zahlen im Array gehen: data[50][8].

Ich summiere auch alle Zahlen in jeder Zeile, die ich getan habe. Ich möchte diese Summe zu dem Datenarray hinzufügen, so dass es ungefähr wie 2 3 8 3 6 5 3 30 aussieht. Wie mache ich das? Hier ist mein Code, wenn Sie es sehen wollte:

int main() 
{ 

    ifstream fin; 
    char ch; 
    int data[50][8]; 
    string names[50]; 

    fin.open("empdata.txt"); 

    int sum = 0; 
    int numOfNames; 
    fin >> numOfNames; 

    for (int i = 0; i < numOfNames; i++) { 

     fin >> names[i]; 

     for (int j = 0; j < 7; j++) { 
      fin >> data[i][j]; 
     } 
      } 

     for (int i = 0; i < 5; i++) 
     { 

      for (int j = 0; j < 7; j++) 
      { 
       sum += data[i][j]; 

      } 
      cout << sum << endl; 
      sum = 0; 
     } 
} 

Hier wird der neue Code ist, der mit mir geholfen C650. Es ist die Ausgabe jetzt nichts: int main() {

ifstream fin; 
char ch; 
int data[50][8]; 
string names[50]; 

fin.open("empdata.txt"); 

int sum = 0; 
int numOfNames; 
fin >> numOfNames; 

for (int i = 0; i < numOfNames; i++) { 

    fin >> names[i]; 

    data[i][7] = 0; 

    for (int j = 0; j < 7; j++) { 
     fin >> data[i][j]; 
     data[i][7] += data[i][j]; 
    } 
} 

for (int i = 0; i < numOfNames; i++) 
{ 
    cout << data[i][7] << endl; 

} 



system("pause"); 
return 0; 

}

+0

Bitte formatieren Sie die Datei ... – Charles

+0

habe ich gerade getan. Hoffe, dass hilft – Ralf

+0

Ich würde Ihnen empfehlen, die STL zu verwenden. Ein 'std :: vector' kann Ihnen wirklich helfen! – Charles

Antwort

1

Die folgende scheint wie das, was Sie zu tun versuchen. Ich werde auf die Fehler im Code hinweisen, die Sie vorgestellt haben.

Dies ist nicht der beste Weg, aber laut OP gibt es einige Einschränkungen, z. B. nicht in der Lage zu sein, die STL zu verwenden.

/* 1 */ #include <fstream> 
/* 2 */ #include <iostream> 
/* 3 */ #include <string> 
/* 4 */ 
/* 5 */ using namespace std; 
/* 6 */ int main() 
/* 7 */ { 
/* 8 */ 
/* 9 */  ifstream fin; 
/* 10 */  int data[50][8]; 
/* 11 */  string names[50]; 
/* 12 */ 
/* 13 */  fin.open("test.txt"); 
/* 14 */ 
/* 15 */  int numOfNames; 
/* 16 */  fin >> numOfNames; 
/* 17 */ 
/* 18 */  for (int i = 0; i < numOfNames; i++) { 
/* 19 */ 
/* 20 */   fin >> names[i]; 
/* 21 */ 
/* 22 */   data[i][7] = 0; /* use last spot in array for sum, set to 0. */ 
/* 23 */   for (int j = 0; j < 7; j++) { 
/* 24 */    fin >> data[i][j]; 
/* 25 */    data[i][7] += data[i][j]; 
/* 26 */   } 
/* 27 */  } 
/* 28 */ 
/* 29 */  for (int i = 0; i < numOfNames; i++) 
/* 30 */  { 
/* 31 */   cout << data[i][7] << endl; /* add each element to the sum here*/ 
/* 32 */  } 
/* 33 */  return 0; 
/* 34 */ } 

OP hatte ein Problem, bei dem keine Ausgabe generiert wurde. OP, Sie müssen sicherstellen, dass die Eingabedatei den richtigen Namen hat ...

+0

Ok, das scheint zu funktionieren, aber es gibt jetzt nichts aus. Hier ist der Code – Ralf

+0

Daten [i] [7] + = Daten [i] [j]; \t \t } \t } \t for (int i = 0; i Ralf

+0

ohhh das nicht vorbei rechts, halte ich werde nur meine oberste Frage bearbeiten – Ralf

0

Wie ich in anderen ähnlichen Posts geantwortet habe: Verwenden Sie eine Struktur, um den Datensatz zu modellieren.

struct Record 
{ 
    std::string last_name; 
    std::string first_name; 
    unsigned int grades[MAXIMUM_GRADES]; 
}; 

Auf diese Weise können Sie eine Reihe von Mischtypen haben:

Record student_info[MAXIMUM_STUDENTS]; 

Um aus einer Datei zu erleichtern lesen, können Sie operator>> Überlastung innerhalb der Struktur:

struct Record 
{ 
    //... 
    friend std::istream& operator>>(std::istream& input, Record& r); 
}; 

std::istream& operator>>(std::istream& input, Record r) 
{ 
    std::getline(input, r.last_name, ','); 
    std::getline(input, r.first_name, ' '); 
    for (unsigned int i = 0; i < MAXIMUM_GRADES; ++i) 
    { 
    input >> r.grades[i]; 
    } 
    return input; 
} 

Dies vereinfacht Ihre Eingangsschleife:

for (unsigned int i = 0; i < MAXIMUM_STUDENTS; ++i) 
{ 
    my_data_file >> student_info[i]; 
} 

Schade, dass Sie std::vector nicht verwenden können. Die std::vector ist ideal zum Lesen von Dateien vor allem, wenn Sie nicht wissen, die Größe der Datei.

+0

dieser Kerl immer noch nicht über Matrix, wie er die Struktur verstehen konnte? – Real73

+0

@ShahrrainNazimReal: Hängt vom Unterrichtskurs und der Reihenfolge der behandelten Themen ab. Es besteht keine Notwendigkeit, Arrays vor Strukturen zu diskutieren. Strukturen können vor Arrays diskutiert werden. –

Verwandte Themen