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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
fstream
'sgetline
Funktion hat diese Signaturen.In deinem code...
Sie versuchen, eine
std::string
wogetline
will einchar*
- Sie können konvertieren vonstring
zu einemchar*
wie diese.Ein Ansatz ist, können Sie ein Zeichen-Puffer zur Speicherung der Inhalte von
getline
wie diesem.Eine bessere Lösung
Ich würde empfehlen, mit
std::getline
aus<string>
, als Sie verwenden könnenstring
Typen anstelle von C-strings.Verknüpfungen Bearbeiten für Sie, da Sie lernen
std::getline
- Funktion Beispielstd::getline
- Funktion BeschreibungEs scheint, dass Sie ein problem Zeiger. Sie versuchen, zu speichern einen Zeiger auf ein char-array in nameAr[], korrekt? Was Sie tun müssen, ist zu definieren nameAr[] als array von Zeigern auf char-arrays, so dass Sie können speichern einen Zeiger auf die einzelnen Namen in der nameAr [] - array.
Versuchen Sie, diese für Ihren Namen-array anstelle von nameAr[].