You are shooting past your fixed-sized arrays due to a defective EOF test. Your loop should look more like the following:
// also, don't do preceding "usageFile >> ... ;"
while (true) {
  // you should also push as many of your charge/count variable declaration
  // in here as possible ...
  // "readFile" is a poor name here, since it actually doesn't
  readFile(usageFile, lowCharge, midCharge, highCharge, lowCount,
    midCount, highCount, planType, phoneCharge);
  usageFile >> phoneNumber >> planType >> phoneCharge;
  if (usageFile.eof()) {
    break;
  }
  cout << phoneNumber << " " << planType << " " << phoneCharge << endl;
};
or
// If you can't use `break` due to your teacher's rules ...
// Note that this is worse style since it uses the hacky "firstTime" check.
bool firstTime = true;
do {
  if (!firstTime) {
    cout << phoneNumber << " " << planType << " " << phoneCharge << endl;
  }
  firstTime = false;
  readFile(usageFile, lowCharge, midCharge, highCharge, lowCount,
    midCount, highCount, planType, phoneCharge);
  usageFile >> phoneNumber >> planType >> phoneCharge;
} while (!usageFile.eof());
11
solved While loop / Thread breakpoint occurs [closed]