Функция добавления баланса. Делаю путем считывания и записывания в вектор файла. Ищу необходимый аккаунт и в векторе меняю баланс. Далее удаляю весь файл и перезаписываю его из вектора. Проблема в том, что после записи в файле такое:
данные аккаунта 1 данные аккаунта 2 три пробела 0
Вот код класса:
class RegData
{
public:
RegData(QString log = "", QString mail = "", QString pass = "", int bal = 0) : login(log), email(mail), password(pass), balance(bal)
{
}
RegData(const RegData& src) :
login(src.login), email(src.email), password(src.password), balance(src.balance)
{
}
void cpy(const RegData& from)
{
login = from.login;
email = from.email;
password = from.password;
balance = from.balance;
}
void output()
{
qDebug() << login<<email<<password<<balance;
}
QString getLogin()
{
return login;
}
QString getEmail()
{
return email;
}
QString getPassword()
{
return password;
}
int getBalance()
{
return balance;
}
void setLogin(const QString log)
{
login = log;
}
void setEmail(const QString mail)
{
email = mail;
}
void setPassword(const QString pass)
{
password = pass;
}
void setBalance(const int bal)
{
balance = bal;
}
private:
QString login;
QString email;
QString password;
int balance;
};
А вот код функции
// объект класса RegData - usr объявлен в коде, там и присваиваются значения. Но с этим проблем нет
void addmoney::on_pushButton_clicked()
{
int value = ui->horizontalScrollBar->value();
int balanceres = 0;
QFile file("C:/Users/David/Documents/Carsharring_files/users.txt");
QVector<RegData> data;
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QTextStream in(&file);
QString str1, str2, str3;
int balance=0;
while(!in.atEnd())
{
in>>str1>>str2>>str3>>balance;
RegData tmp(str1, str2, str3, balance);
data.push_back(tmp);
qDebug() << tmp.getLogin()<<tmp.getEmail()<<tmp.getPassword()<<tmp.getBalance();
}
for(QVector<RegData>::iterator it = data.begin(); it<data.end(); it++)
{
if(it->getLogin() == usr.getLogin() && it->getPassword() == usr.getPassword())
{
balanceres = value+it->getBalance();
it->setBalance(balanceres);
}
}
file.close();
QFile infile("C:/Users/David/Documents/Carsharring_files/users.txt");
if(infile.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text))
{
for(QVector<RegData>::iterator it = data.begin(); it < data.end(); it++)
{
QTextStream textstr(&infile);
textstr<<it->getLogin()<<" "<<it->getEmail()<<" "<<it->getPassword()<<" "<<it->getBalance()<<"\n";
}
}
}
usr.setBalance(balanceres);
QMessageBox::information(this, "Баланс", "Операция успешна");
}
Что я думаю, от чего это. После перезаписи файла, после последнего элемента идет переход на новую строку. И при считывании туда суется конструктор в пустую строку. Почему я так думаю, вот конструктор по умолчанию: RegData(QString login = "", QString email = "", QString password = "", int balance = 0), как раз таки так, как результат в файле. Да, поля пустые, но при записи есть же пробелы для разделения. От туда то и идет все.
И нет как убрать переход на новую строку т.к все аккаунты пойдут в одну строку...
P.S: Прошу без сильной критики, новичок.
while(!in.atEnd())см. https://ru.stackoverflow.com/q/833980/195342 – Harry Jul 06 '22 at 17:56while(!in.atEnd()) { in>>str1>>str2>>str3>>balance;наwhile(in>>str1>>str2>>str3>>balance) {– Harry Jul 06 '22 at 18:34