Ваш цикл while
должен выглядеть следующим образом:
while(in_file >> ac_no[i] &&
in_file >> ac_name[i] &&
in_file >> ac_amount[i] &&
in_file >> ac_emi[i] &&
in_file >> ac_sanc[i])
cout<<"Accout no = "<<ac_no[i]<<" Name = "<<ac_name[i]<<" Amount = "<<ac_amount[i]<<" Emi = "<<ac_emi[i]<<" Sanction = "<<ac_sanc[i]<<endl;
i++;
}
Такой цикл гарантирует, что в случае ошибки в файле он прекратит чтение.
Кстати,Размер каждого массива должен быть достаточно большим, чтобы вместить все значения в файле.Вы объявили каждый массив размером 30
, кроме string ac_sanc[2]
.Почему размер ac_sanc
составляет всего 2
?Ты знаешь, что это значит?Это означает, что ac_sanc[i]
вызовет неопределенное поведение для i >=2
.Ваша программа может (и, скорее всего, будет) аварийно завершить работу.Кроме того, если это может быть только y
или n
, то почему бы вам не объявить его как char
массив?
Поскольку вы используете C ++, я бы предложил вам определить структуруи используйте std::vector
следующим образом:
#include <string>
#include <vector>
struct Account
{
std::string ac_name;
int ac_no;
char ac_sanc;
float ac_emi;
int ac_amount;
};
std::vector<Account> accounts;
Account ac;
while(in_file >> ac.ac_no &&
in_file >> ac.ac_name &&
in_file >> ac.ac_amount &&
in_file >> ac.ac_emi &&
in_file >> ac.ac_sanc)
accounts.push_back(ac);
//...
//you may use 'ac' to print each values
}