Je dois donc créer un programme bancaire pour une tâche, et mon professeur veut un fichier journal de chaque "opération" (Il était vraiment vague à ce sujet, j'ai décidé d'enregistrer les entrées et les sorties). Le problème que je rencontre est que chaque fois que j'appelle une nouvelle fonction, je dois rouvrir le fichier et écraser ce qui était précédemment là. Autant que je sache, l'utilisation répétée de .open fera que la fonction que j'utilise ignorera la sortie précédente.
J'ai essayé de déclarer un ofstream global en espérant qu'il changerait, mais le problème persiste de toute façon. Le rinçage et/ou la fermeture ne semblaient pas aider, mais il est tout à fait possible que je les ai mal utilisés ou que la syntaxe soit erronée. Le code ci-dessous est la fonction principale, la fonction read_accts et la fonction de menu. Si je termine le programme avant d'appeler la fonction read_accts, le fichier journal aura "Combien de comptes y a-t-il?" Mais si j'autorise le programme à appeler les deux autres fonctions, alors le fichier journal n'a que la sortie du fichier menu. Je m'excuse pour le long poste, mais je ne sais pas ce qui ne va pas.Fichier Ofstream écrasé dès qu'il est ouvert
int main()
{
ofstream log;
log.open("Log.txt");
int MAX_NUM = 100;
BankAccount account[MAX_NUM];
int num_accts = 0;
char selection = 'Z';
cout << "How many accounts are there?" << endl;
log << "How many accounts are there?" << endl;
cin >> MAX_NUM;
read_accts(account, MAX_NUM, num_accts);
cout << endl;
cout << "There are " << num_accts << " accounts" << endl;
log << "There are " << num_accts << " accounts" << endl;
cout << endl;
print_accts(account, MAX_NUM);
cout << endl;
`
while (selection != 'Q' && selection != 'q')
{
menu();
cin >> selection;
log << selection;
switch (selection)
{
case 'W':
case 'w':
withdrawal(account, num_accts);
break;
case 'D':
case 'd':
deposit(account, num_accts);
break;
case 'N':
case 'n':
new_acct(account, num_accts);
break;
case 'B':
case 'b':
balance(account, num_accts);
break;
case 'I':
case 'i':
account_info(account, num_accts);
break;
case 'C':
case 'c':
close_acct(account, num_accts);
break;
case 'Q':
case 'q':
print_accts(account, num_accts);
break;
default:
cout << "Invalid selection" << endl;
log << "Invalid selection" << endl;
}
cout << endl;
}
print_accts(account, MAX_NUM);
cout << "Goodbye" << endl;
log.close();
return 0;
}
int read_accts(BankAccount account[], int MAX_NUM, int &num_accts)
{
ofstream log;
log.open("log.txt", std::ofstream::app);
string f;
string l;
int social;
int acct;
string type;
double bal;
int i = 0;
ifstream readfile;
readfile.open("bankdatain.txt");
if (!readfile)
{
cout << "Can't open input file." << endl;
log << "Can't open input file." << endl;
exit(1);
}
while (readfile >> f >> l >> social >> acct >> type >> bal)
{
account[i].setfname(f);
account[i].setlname(l);
account[i].setssnum(social);
account[i].setacctnum(acct);
account[i].settype(type);
account[i].setbalance(bal);
i++;
num_accts++;
}
return num_accts;
}
void menu()
{
ofstream log;
log.open("Log.txt");
cout << "W - Withdrawal" << endl;
log << "W - Withdrawal" << endl;
cout << "D - Deposit" << endl;
log << "D - Deposit" << endl;
cout << "N - New account" << endl;
log << "N - New account" << endl;
cout << "B - Balance" << endl;
log << "B - Balance" << endl;
cout << "I - Account Info" << endl;
log << "I - Account Info" << endl;
cout << "C - Close Account" << endl;
log << "C - Close Account" << endl;
cout << "Q - Quit" << endl;
log << "Q - Quit" << endl;
cout << "Please make your selection: " << endl;
log << "Please make your selection: " << endl;
}
Vous pouvez simplement ouvrir le fichier en mode append. http://www.cplusplus.com/reference/fstream/fstream/open/ –