2016-04-27 36 views
0

ユーザーに販売データの入力を求め、そのデータを構造体配列に追加するように指示します。これはそれについて行く方法ですか?配列を含む構造体をバイナリファイルに書き込む

これは私の構造体である:

struct CompanyDivision { 
char name[NAME_LENGTH]; 
double quarterlySales[QUARTERS];}; 

これが私のメイン

int main() { 

const int DIVISIONS = 4; 


CompanyDivision allDivisions[DIVISIONS] = {{ "North" }, { "South" }, { "East" }, { "West" }}; 

cout << "Please enter the sales figures for each quarter at each division: " << endl; 

for (int quarter = 0; quarter < QUARTERS; quarter++) { 
    cout << "\n**For quarter " << quarter + 1 << endl; 
    for (int division = 0; division < DIVISIONS; division++) { 
     cout << "\t" << allDivisions[division].name << " >> $"; 
     cin >> allDivisions[division].quarterlySales[quarter]; 
     while (allDivisions[division].quarterlySales[quarter] < -1) { 
      cout << "Please enter a non-negative sales figure." << endl; 
      cout << "\t" << allDivisions[division].name << " >> $"; 
      cin >> allDivisions[division].quarterlySales[quarter]; 
     } 
    } 
    cout << endl; 
} 
ofstream outputFile("QuarterlySales.dat", ios::binary | ios::out); 
for (int i = 0; i < QUARTERS; i++) { 
    for (int j = 0; j < DIVISIONS; j++) { 
     outputFile.write(reinterpret_cast <char*> (&allDivisions[i].quarterlySales[j]), sizeof(CompanyDivision)* 4); 
    } 
} 
outputFile.close(); 

system("pause"); 
return 0; 

}

ループのネストされたが、各部門(北、南、西、東正しく行われています)とそこに四半期(1,2,3,4)とバイナリファイルに書き出すための構文が正しい?

ありがとうございました!

答えて

0

forの式は正しいです...それだけです!

  • あなたはラインの出力端に'\n'std::endlを混合している:あなたは、リードが正しかったことをテストすることなく、cinからdouble値を読み取る前者
  • にC++のスティック:if (!cin) {...}を使用
  • テストを読んだ後( <= -1以上< 0
  • outputFile.write(reinterpret_cast <char*> (&allDivisions[i].quarterlySales[j]),最初の部分のために正しいことである(有効char *)に倍増するポインタを変換しなければならない非負のため)ネゲートが、サイズがであるべきですまたはsizeof(allDivisions[i].quarterlySales[j])またはsizeof(allDivisions[0].quarterlySales[0])

しかし、あなたは、ファイルにバイナリ値を格納すると、異なるアーキテクチャ間で移植ではないことを覚えておいてください。

関連する問題