beginer_38
(Programmer in future)
29.Май.2020 17:54:32
#7
void Delete(const char* filename, Phone* Myphone, int size)
{
string name;
string phone_number;
string email;
ofstream fout(filename, ofstream::trunc);
for (int i = 0; i < size; i++)
{
if (i == index)
{
Myphone[i].FIO = "";
Myphone[i].number = "";
Myphone[i].email = "";
}
else
{
name = Myphone[i].FIO;
phone_number = Myphone[i].number;
email = Myphone[i].email;
}
}
fout.close();
}
Я ничего не понимаю уже
AlexP
(Alex P.)
29.Май.2020 17:58:47
#8
Тут нет записи в файл.
И для удаления из массива надо сдвинуть все элементы на 1, иначе ж size
нельзя уменьшить.
beginer_38
(Programmer in future)
29.Май.2020 18:23:24
#9
void Delete(const char* filename, Phone* Myphone, int size)
{
string name;
string phone_number;
string email;
string res;
ofstream fout(filename, ofstream::trunc);
for (int i = 1; i < size; i++)
{
if (i == index)
{
Myphone[i].FIO = "";
Myphone[i].number = "";
Myphone[i].email = "";
}
else
{
name = Myphone[i].FIO;
phone_number = Myphone[i].number;
email = Myphone[i].email;
res = name + " " + phone_number + " " + email;
fout << res << "\n";
}
}
fout.close();
}
Ну вот записал в файл, сдвинул элементы и все равно ничего изменилось.
AlexP
(Alex P.)
29.Май.2020 18:46:48
#10
beginer_38:
index
не объявлено в этом коде нигде
Сделайте функцию Rewrite
, которая просто принимает массив и size
, и перезаписывает им файл без всяких if
.
Сдвиньте элементы массива , уменьшите size
и передайте в Rewrite
.
beginer_38
(Programmer in future)
29.Май.2020 18:49:43
#11
Я индекс возвращаю из функции поиска.
index = Find(Myphone, count);
Delete("Phone_book.txt", Myphone, count);
если Index локальная переменная, то она невидима внутри Delete
index = Find(Myphone, count);
Delete("Phone_book.txt", Myphone, count,index );
void Delete(const char* filename, Phone* Myphone, int size, int index)
AlexP
(Alex P.)
29.Май.2020 20:42:51
#14
beginer_38:
И объявляю его в начале
А почему бы просто не передавать параметром?)
Глобальные переменные лучше не делать без необходимости.
beginer_38
(Programmer in future)
29.Май.2020 20:45:18
#15
Я совсем уже запутался. Преподаватель мне сказал, что массив должен быть динамический. Ничего не выходит.
beginer_38
(Programmer in future)
29.Май.2020 21:00:34
#17
void Delete(const char* filename, Phone* Myphone, int size, int index)
{
string name;
string phone_number;
string email;
string res;
ofstream fout(filename, ofstream::trunc);
for (int i = index - 1; i < size - 1; i++)
{
Myphone[i].FIO = Myphone[i+1].FIO;
Myphone[i].number = Myphone[i+1].number;
Myphone[i].email = Myphone[i+1].email;
}
for (int i = 0; i < size - 1; i++)
{
res = Myphone[i].FIO + " " + Myphone[i].number + " " + Myphone[i].email;
fout << res;
}
fout.close();
}
Вот что-то сделал, но опять не то что-то. Уже крыша едет))
beginer_38
(Programmer in future)
29.Май.2020 21:01:43
#18
Ну переменные string name; string phone_number; string email; не нужны, просто не удалил
beginer_38
(Programmer in future)
29.Май.2020 21:06:40
#19
AlexP
(Alex P.)
29.Май.2020 21:07:22
#20
beginer_38:
index - 1
-1 тут это если считать с 1, а не 0.
beginer_38:
не то что-то
Так что именно происходит?)
Это просто вывод значений массива.
beginer_38
(Programmer in future)
29.Май.2020 21:29:11
#21
Ну вроде разобрался с этим. Но у меня есть функция сортировки, там тоже нужно перезаписать в файл, а то удаляется не та строка. То есть, если добавить элементы и потом сразу вызвать функцию удаления, то все ок. А если отсортировать, то удаляется не та строка)))
beginer_38
(Programmer in future)
29.Май.2020 21:34:06
#22
Только подскажите пожалуйста что использовать при сортировке? ios::trunc и ios::app, наверно не подойдут? А вообще, спасибо огромное, очень помогли. Занимаемся один раз в неделю, в плюсы не самый легкий язык, приходится многое изучать самостоятельно. Поэтому все непросто)
beginer_38
(Programmer in future)
29.Май.2020 21:42:08
#23
И еще один вопрос, почему когда запускаю программу и выполняю функцию Show, у меня появляется еще одна неполная строка, только с именем?
AlexP
(Alex P.)
29.Май.2020 21:54:50
#24
поэтому надо сделать
и вызывать её, где надо.
Если проблемы при сортировке или других задачах как-то связаны с наличием вызова этого удаления, то видимо “глобальный” size не обновлен.
AlexP
(Alex P.)
Разделил(а) эту тему
30.Май.2020 10:54:47
#25
AlexP
(Alex P.)
Разделил(а) эту тему
30.Май.2020 11:14:10
#26