-1

I am creating an ATM program in C++ for school and I'm using this project as an opportunity to begin learning the language. I am trying to output bank accounts to a text file in this format:

First Last CardNumber PinNumber Balance 

Originally it was outputting fine and then I developed a bunch of new methods etc. I didn't change any of the original code that has to do with outputting the bank account but now it's outputting strangely.

My output ends up being:

First Last random letter or symbol PinNumber blank 

Here is my code for creating a new bank account:

AccountHandler.h

#include <iostream> #include <string> using namespace std; struct bankAccount //Create a new bank account type { string name; string cardNum; string balance; string pin; }; class AccountHandler { public: AccountHandler(); ~AccountHandler(); void withdraw(struct bankAccount acc, string amount); void deposit(struct bankAccount acc); int checkBalance(struct bankAccount acc); void createAccount(); }; 

AccountHandler.cpp

void AccountHandler::createAccount() //creates a new bank account and stores in accounts.txt { ofstream accounts; struct bankAccount newAcc; string first, last; string tempPin1, tempPin2; if (!accounts.is_open()) { accounts.open("accounts.txt", ofstream::app); } std::cout << "Thank you for choosing to bank with ATM406!\n\n"; std::cout << "Please enter the name for the account: "; std::cin >> first >> last; newAcc.name = first + " " + last; while (true) { std::cout << "\nPlease enter a 4-digit pin for security: "; std::cin >> tempPin1; std::cout << "\nPlease re-enter your 4-digit pin for validation: "; std::cin >> tempPin2; if (tempPin1 == tempPin2) //PINS MATCH { newAcc.pin = tempPin1; break; } else //PINS DO NOT MATCH { std::cout << "The pins did not match!" << std::endl; } } //GENERATE A RANDOM 4-DIGIT NUMBER FOR CARDNUM srand(time(NULL)); newAcc.cardNum = rand() % 9000 + 1000; //STORE ACCOUNT IN FORMAT: NAME\nCARDNUM\nPIN\nBALANCE accounts << newAcc.name << "\n" << newAcc.cardNum << "\n" << newAcc.pin << "\n" << newAcc.balance << "\n"; accounts.close(); std::cout << "\nAccount created with name: " << newAcc.name << " pin: " << newAcc.pin << ". Card number: " << newAcc.cardNum << "\n\n\n"; } 

Thank you!

2
  • 1
    How are you updating bankAccount::balance ? I don't see in the posted code. Commented Mar 15, 2016 at 14:34
  • 1
    newAcc.cardNum = rand() % 9000 + 1000; looks suspicious. See e.g. stackoverflow.com/questions/4668760/… if you want to convert an integer to a std::string Commented Mar 15, 2016 at 14:34

1 Answer 1

3

cardNum is a string, but you assign an integer to it. That converts the integer to a char (truncating it to a much smaller value) and stores it in the string.

balance is blank because it's an empty string, you never give the string a value.

N.B. the call to is_open() in createAccount is pointless, the fstream can't be open, because you just default-constructed it.

Sign up to request clarification or add additional context in comments.

Comments