さて、私はプログラミングの初心者なので、優しくしてください。これまでのところ、C ++のみを学習しており、コンパイラとしてVisualStudio2010を実行しています。このプログラムでは、テキスト入力ファイルから読み取り、3つの配列のセットに情報を書き込もうとしています。1つの配列は名前のリストを処理し、他の2つはそれぞれ労働時間と時給です。後者の2つを使用して一連の収益を計算し、それらの計算を別のテキストファイルに出力します。ただし、私の問題は、最初の配列の入力を取得することです。私が使用している入力ファイルには、次のように配置されたテキストがあります。
J. Doe * 35 12.50
J.ドーン*2010.00........。
ifstream getlineを使用して、アスタリスクが区切り文字として機能する名前を取得し、次の2つの数値を他の2つの配列に書き込んでいるため、名前の末尾にはアスタリスクが付いています。後者の2つの値は空白で区切られているため、問題が発生することはないと思います。処理が必要な他のエラーがあると確信していますが、残りのデバッグを開始する前に、最初のエラーを処理する必要があります。inFile.getlineを呼び出す行でエラーが発生しました。これは次のようになります。
エラーC2664:'std :: basic_istream <_Elem、_Traits>&std :: basic_istream <_Elem、_Traits> :: getline(_Elem *、std :: streamsize、_Elem)':パラメータ1を'std::string'から'に変換できません'char*'。
私が他の場所で読んだことから、(私が思うに)問題は文字列をchar配列に書き込もうとすることに起因しますが、それらは異なるデータ型であるため機能しません。名前を数値から分離するための区切り文字が必要なため、名前を取得するための他の実行可能な方法が存在するかどうかはわかりません。この問題を解決する方法についてのアドバイスをいただければ幸いです。
これが私が書いた情報源です:
#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;
}
プログラム全体を含めて、コーディングをどこに進めるかについてのアイデアを提供します。助けてくれてありがとう!