Lesen Eingabe von text Datei in array in c++

Okay, sanft sein, denn ich bin sehr viel ein Anfänger in die Programmierung. Bisher habe ich nur studiert C++ und ich verwende Visual Studio 2010, wie mein compiler. Für dieses Programm, bin ich versucht zu Lesen von einem text-Eingabe-Datei und schreibt die Informationen zu einem set von drei arrays. Ein array behandeln, eine Liste von Namen, und die anderen beiden sind für Arbeitszeit und Stundenlohn rate, beziehungsweise. Ich werde die beiden letzteren zu berechnen, die einen Satz von Ergebnis-und Ausgang, die ganze Sache zu einem anderen text-Datei als ein Bericht. Mein problem jedoch ist mit dem Erwerb Eingabe für die erste Reihe. Die input-Datei verwende ich den text, der so angeordnet:

J. Doe* 35 12.50
J. Dawn* 20 10.00
.........

Die Namen sind gezogene, durch Sternchen, da ich versuche, ifstream getline zu erwerben, die Namen mit den Sternchen fungiert als Trennzeichen, und schreiben die folgenden beiden zahlen in den beiden anderen arrays. Die letzteren beiden Werte getrennt durch Leerzeichen, so dass ich nicht denke, Sie werden keine Probleme verursachen. Ich bin sicher, es gibt andere Fehler, die Notwendigkeit der Handhabung, aber ich muss arbeiten, durch den ersten Fehler, bevor ich mit dem Debuggen beginnen können, den rest.

Mein problem tritt auf bei der Zeile wo ich Anrufe inFile.getline, da bekomme ich folgende Fehlermeldung: error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize,_Elem)' : cannot convert parameter 1 von 'std::string' to 'char *'.

Von dem, was ich gelesen habe an anderer Stelle (glaube ich) das problem ergibt sich aus versuchen zu schreiben, die einen string in ein char-array, das wird nicht funktionieren, da Sie von verschiedenen Arten von Daten. Ich bin mir nicht sicher, ob andere praktikable Methoden zur Erfassung der Namen, da brauche ich das Trennzeichen zum trennen der Namen aus der numerischen Werte. Irgendwelche Tipps, wie dieses Problem zu beheben würde sehr geschätzt.

Hier ist die Quelle, die ich geschrieben habe:

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

const int EMP_NUM = 5;
const int BASE_HOURS = 40;
const char N_SIZE = 8;

int main()
{
 int i;
 double rEarnings, oEarnings, tEarnings,
 trEarnings, toEarnings, ttEarnings;
 ifstream inFile;
 ofstream outFile;
 inFile.open("records.txt");
 outFile.open("report.txt");

 outFile << setprecision(2) << showpoint << fixed;

 outFile << setw(50) << "Payroll Report" << "\n\n";
 outFile << "EMPLOYEE NAME" << setw(25) << "REGULAR EARNINGS" << setw(25) << "OVERTIME EARNINGS" << setw(25) << "TOTAL EARNINGS" << endl;

 string nameAr[EMP_NUM];
 int hoursAr[EMP_NUM];
 double hrateAr[EMP_NUM];

 for (int i = 0; i < EMP_NUM; i++) //Get input from our input file.
 {
  inFile.getline(nameAr[i], EMP_NUM, "*");
  inFile >> hoursAr[i] >> hrateAr[i];
 }

 for (int i = 0; i < EMP_NUM; i++) //Make the calculations to be sent to our report.
 {
  char nameAr[N_SIZE];
  int hoursAr[N_SIZE];
  double hrateAr[N_SIZE];

  if (hoursAr[i] > 40) //For employees with overtime hours.
  {
  //double rEarnings, double oEarnings, double tEarnings,
  //double trEarnings, double toEarnings, double ttEarnings;
  //rEarnings = 0, oEarnings = 0, tEarnings = 0,
  //trEarnings = 0, toEarnings = 0, ttEarnings = 0;

   rEarnings = BASE_HOURS * hrateAr[i];
   oEarnings = (hoursAr[i] - BASE_HOURS) * hrateAr[i] * 1.5;
   tEarnings = rEarnings + oEarnings;
   trEarnings += rEarnings;
   toEarnings += oEarnings;
   ttEarnings += tEarnings;
   outFile << left << nameAr[i];
   //<< setw(25) << right << rEarnings << setw(25) << right << oEarnings << setw(25) << right << tEarnings << endl;

  } 
  else //For employees without overtime hours.
  {
  //double rEarnings, double oEarnings, double tEarnings,
  //double trEarnings, double toEarnings, double ttEarnings;
  //rEarnings = 0, oEarnings = 0, tEarnings = 0,
  //trEarnings = 0, toEarnings = 0, ttEarnings = 0;

   rEarnings = hoursAr[i] * hrateAr[i];
   oEarnings = 0;
   tEarnings = rEarnings + oEarnings;
   trEarnings += rEarnings;
   toEarnings += oEarnings;
   ttEarnings += tEarnings;
   outFile << left << nameAr[i]; 
   //<< setw(25) << right << rEarnings << setw(25) << right << oEarnings << setw(25) << right << tEarnings << endl;
  }
 }

 outFile << endl << endl;

 outFile << setw(33) << trEarnings << " *" << setw(23) << toEarnings << " *" << setw(23) << ttEarnings << " *\n\n";

 outFile << left << "TOTAL EMPLOYEES" << " " << (i - 1);

 inFile.close(); outFile.close();

 return 0;
}

Habe ich das gesamte Programm, um Ihnen eine Idee geben, wo ich planen, zu gehen mit der Codierung. Vielen Dank im Voraus für die Hilfe!

  • Sie sollten entfernen Sie das forum [code] - tags und Einrücken von code mit 4 Räumen. (oder wählen Sie es aus und drücken Sie die Schaltfläche code (der mit 1010 in es). Das macht den code viel leichter zu Lesen.
InformationsquelleAutor Nick L. | 2010-11-05
Schreibe einen Kommentar