Weiter zur nächsten Zeile in einer Datei, C++

Hier ist eine unvollständige Bruchteil von einem Programm, das ich Schreibe. Um zusammenzufassen, nimmt das Programm die info aus einer Eingabe-Datei ( name und ID dann eine Reihe von zahlen), hat einige mathematische und druckt anschließend die Antworten in einer Datei gespeichert werden. Jetzt das Programm druckt den Namen und die ID, und dann druckt es die zahlen über und über und über und über. Ich möchte es zu bewegen auf die nächste Zeile, drucken Sie den Namen und die ID und wiederholen Sie, bis die Datei über

Professor sagt, dass ich sollte mit getline, aber, die nicht machen keinen Sinn für mich

do
{
  infile >> name >> Id;
  cout<< name << Id << std::endl;
  hworkgrade = CalHworkGrade(grade1, infile);
  printRecord(name, Id, outfile);
}
while(!infile.eof());

Eingang:

Morgan 12388671 100 100 100 
John 67894 100 100 100 

Ausgabe:

Vagts,Morgan 
100100 
100100 
100100 
100100 
100100 
Mit 300 000 mal mehr) 

Update:

do
{
  while (getline (infile, line))
  {
  istringstream iss(line);
  iss >> name >> Id;
  cout<< name << Id;
  hworkgrade = CalHworkGrade(grade1, infile);
  printRecord(name, Id, outfile);
  }
}

while(!infile.eof());

  • Warum nicht Sie Lesen die Daten auf der Leitung? Und wenn Sie es nicht wollen, warum dann nicht verwenden, std::getline zu Lesen eine Zeile zu einem Zeitpunkt?
  • Ich habe versucht, die früheren, aber es hat nicht funktioniert. Wahrscheinlich Tat ich es falsch. Könnten Sie mir eine hand geben?
  • Es ist ganz einfach: while (std::getline(infile, line)) { /* put line in an std::istringstream and extract the data from that string stream */ }
  • schlägt der beste Weg zur Lösung dieses Problems. Wenn Sie das tun infile >> name >> Id, das problem ist, dass jede Linie hat mehr Dinge Folgen (100 100 100 in deinem Beispiel). Also entweder erklären, mehr Variablen zum speichern des scores, oder einfach nur die Arbeit mit isstringstream - und Prozess-jede Zeile. Wenn Sie möchten diese unterstützen zu können, mehr erreicht souverän in die Zukunft, Sie müssen realisieren, dass ohnehin
  • jetzt springt Sie über die erste Zeile und druckt die Namen aus der zweiten Zeile zweimal. Ich habe versucht, die Neuordnung der Reihenfolge der Schleife und löschen der Variablen zu Beginn jeder Schleife sowie.
  • hey morgan, es ist so ziemlich unmöglich zu verstehen, wie Ihnen zu helfen ohne zu sehen, aktualisierten code. Sie werden es, seien Sie einfach geduldig. ich denke, Sie sollten aufhören zu versuchen, zu schreiben, Dateien oder alles, und drucken Sie die Ergebnisse. darüber hinaus Suche für ähnliche Probleme. Zum Beispiel, anpassen das csv-parsing-Ansatz, statt zu arbeiten, mit , als Ihre Trennzeichen, Leerzeichen. Oder noch besser, da die CSV wird unterstützt durch viele Programme und websites, verwenden Sie das format statt
  • Dies ist ein viel sauberer code, danke. Außer jetzt wird es nicht zu bewegen auf die nächste Zeile. Es druckt nur die erste Zeile einmal.
  • do { while (getline (infile, line)) { istringstream iss(Zeile); iss >> Namen >> Id; cout<< name << Id; hworkgrade = CalHworkGrade(grade1, infile); printRecord(name, Id, outfile); } } while(!infile.eof());

InformationsquelleAutor Morgan | 2017-02-20
Schreibe einen Kommentar