将名称和数字输出到文件C ++

时间:2014-02-01 23:50:39

标签: c++

我的程序能够记录您输入并显示的所有名称和数量“数字” 屏幕,我遇到的问题是将所有这些数字和名称保存到文件中。

它似乎只记录并保存您输入到文件中的最后一个单词和数字。例如,您键入4个名称和4个不同的数字,它将只保存姓氏输入和数字,而不是第一个输入。

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <fstream>

using namespace std;

struct bank_t {
  string name;
  int money;
} guests[100];  // **guests name = maximum number of names to enter**

void printcustomer (bank_t nombres);  // **bank_t nombres = names**

int main ()
{
  string amount;  //** amount to enter**
  int n;
  int i;  //** number of customers **
  //int i=3;
    cout<<"Please enter the amount of customers";
    cout<<" then press 'ENTER' \n";
    cin >> i;  // **will take what ever amount of names you decide to input **
    cin.get();

  for (n=0; n<i; n++)
  {

    cout << "\n Enter the name of customer: \n";
    getline (cin,guests[n].name);
    cout << "\n Enter the amount of money: \n $: ";
    getline (cin,amount);
    stringstream(amount) >> guests[n].money;
  }

  cout << "\n You have entered these names:\n";
  for (n=0; n<i; n++)
    printcustomer (guests[n]);

  return 0;
}

void printcustomer (bank_t nombres)
{

    cout << nombres.name;  //** display the final names **
    cout << "  $" << nombres.money << " Dollars"<< "\n"; //** display the final amount **

    ofstream bank_search;
    bank_search.open ("alpha.dat");
    //bank_search.write << nombres.name ;
    bank_search << nombres.money;
    bank_search.close();    

}

1 个答案:

答案 0 :(得分:2)

  

它似乎只记录并保存您输入文件的最后一个单词和数字。

您正在为要编写的每条记录打开和关闭文件,并覆盖之前编写的记录!

您需要以附加模式打开文件(请参阅std::ios_base::app),或在main()的循环外打开文件,并将ofstream作为参数传递给每个{ {1}}函数调用(会更好一点)。

printcustomer()

如图所示执行效率不高,因为打开和关闭文件是一项相对昂贵的操作。更好的解决方案是打开文件一次并附加所有新输入的记录:

void printcustomer (bank_t nombres)
{

    cout << nombres.name;  //** display the final names **
    //** display the final amount **
    cout << "  $" << nombres.money << " Dollars"<< "\n"; 

    ofstream bank_search;
    bank_search.open ("alpha.dat", std::ios_base::app); // Note the append mode!
    //bank_search.write << nombres.name ;
    bank_search << nombres.money;
    bank_search.close();    

}

ofstream bank_search("alpha.dat", std::ios_base::app);

cout << "\n You have entered these names:\n";
for (n=0; n<i; n++)
{
    printcustomer (bank_search,guests[n]);
}
bank_search.close();