2017-03-26 3 views
0

Gibt es trotzdem numerische Daten bis zu einer neuen Zeile \n?C++: Lesen von numerischen Daten bis n

Ich weiß, dass die getline() Funktion funktioniert, bis \n erreicht ist, aber es ist eine Zeichenfolge-Funktion, so dass ich nicht weiß, wie man es nutzt, wenn ich numerische Eingaben aus einer Datei sammeln muss.

Ich muss in der Lage sein, dies zu tun, da nehme ich numerische Daten in einer Datei wie folgt aussehen:

23 42 523 423 53 

13 24 242 24 23 23 523 52 

42 24 12 

Wenn ich die Summe jeder Zeile sammeln, dann muss ich in der Lage zu wissen, wann eine gegebene Zeile endet (wenn \n erreicht ist), trifft dies zu, wenn im Gegensatz zu dem oben angegebenen Beispiel eine unbekannte Anzahl von zu lesenden Zeilen vorhanden ist.

Antwort

1

Sie können einfach nächstes Zeichen nach int überprüfen, um Ihre Aufgabe zu erfüllen!

Beispiel

#include <iostream> 
#include <string> 
#include<fstream> 
using namespace std; 

int main() 
{ 
    ifstream in("File.txt"); 
    int count = 0; 
    int temp = 0; 
    char ch = '\0'; 
    int i = 1; 
    while (!in.eof()) 
    { 
     while (ch != '\n') 
     { 
      in >> temp; 
      count = count + temp; 
      in.get(ch); 
      if (in.eof()) 
       break; 
     } 
     cout << "Line : " << i << " Sum : " << count; 
     if (!in.eof()) 
     ch = '\0'; 
     count = 0; 
     i++; 
    } 
    system("pause"); 
    return 0; 

} 

Ein weiterer Ansatz Daten in 2D-Array sein zu lesen und seine jede Zeile summieren.

int arr[n][m]; 
int temp=0; 
for(int i=0;i<n;i++) 
for(int j=0;j<m;j++) 
in>>arr[i][j]; 

for(int i=0;i<n;i++) 
{ 
for(int j=0;j<m;j++) 
{ 
temp=temp+arr[i][j]; 
} 
cout<<temp; 
temp=0; 
} 
+0

Brilliant! Danke, dein erstes Beispiel ist genau das, was ich gesucht habe. – Matt

+0

Ist das 'if (eof()) break;' part redundant? Es sollte ein '\ n' am Ende der Datei haben, nicht? Und sobald das Ende der Datei erreicht ist, sollte die äußere Schleife nicht erneut beginnen. – Matt

+0

Nein! Dann ch immer '\ 0' und indem wir keine Eingabe von Datei bekommen können wir nicht erreichen –