Телефонная книга С++, выводит не заполненные элементы и не работает сортировка, поиск

Можно фрагмент кода пожалуйста?

Так это

уже есть тут:

только i никуда не возвращается, и в файле видимо всегда 100 элементов потому что 100 передается во Write.

Так что же делать в моем случае?

Так в майне константой задана сотня.

Делать динамический массив тогда? Я сойду сума все переписывать

Так я ж говорю самый простой способ сделать почти-динамический массив: физически создать 100, но реально использовать меньше (считать сколько было в файле, сколько добавили и т.д.)

А вообще надо было или сделать абстракцию для динамического массива (обобщенные функции добавления/удаления элементов любого типа и т.д.) или взять готовый std::vector.

Так я ж говорю самый простой способ сделать почти-динамический массив: физически создать 100, но реально использовать меньше (считать сколько было в файле, сколько добавили и т.д.)

А вообще надо было или сделать абстракцию для динамического массива (обобщенные функции добавления/удаления элементов любого типа и т.д.) или взять готовый std::vector.

Не хватает мне знаний для std::vector. А в остальном не понимаю как это реализовать.

Так это наоборот проще.

Завести переменную с используемым размером в main и передавать её везде в size вместо 100.
Ну и менять её в соответствии с действиями: возвращать из Read размер прочитанного из файла, +1/-1 при добавлении/удалении и т.д.

А посмотрите функцию поиска в моем коде пожалуйста! Что там не так?

Так а что именно не работает там?

Не знаю насчет работоспособности, вроде бы выглядит, что должно работать, но вообще лучше стараться делать функции “чистыми”, отделять ввод/вывод. Например, тут выделить функции типа FindByName, FindByEmail, которые принимают массив и искомое значение, и возвращают массив индексов или элементов.

Получается при каждом новом открытии файла, старые данные не будут видны?

Это как? :confusedparrot:

Как организовать такую переменную с используемым размером тогда? Вообще ничего уже не соображаю

В любом файле “видны” те данные, которые там сейчас. Причем тут старые непонятно.

Выше ж написано.
Прочитали из файла данные — записали в переменную прочитанное количество.
Добавили элемент — увеличили на 1.
и т.д.

Так сделайте перерыв )

Пожалуй с этого момента пора определиться что именно сортируется. Имя, маил, телефонный номер или что нить ещё?

Напишите пожалуйста маленький фрагмент кода, я наверно не понимаю синтаксис. А то отдыхать не получится))

Тут как раз понятно, сортировка по имени естественно)

А, да, и при сортировке еще надо сравнивать всю строку-ключ, а не первый символ.
std::string это поддерживает.

Myphone[i].FIO < Myphone[i + 1].FIO


Ну и непонятно зачем префикс my, и почему список телефонов называется “телефон” (phone), а не “телефоны” (phones).

С сортировкой вроде разобрался, вроде даже работает

void Sort(Phone*Myphone , int size)
{
	string temp;
	for (int i = 0; i < size; i++)
	{
		for (int j = 0; j < size - 1; j++)
		{
			if (Myphone[j].FIO > Myphone[j + 1].FIO)
			{
				temp = Myphone[j].FIO;
				Myphone[j].FIO = Myphone[j + 1].FIO;
				Myphone[j + 1].FIO = temp;
			}
		}
	}
}

С грамматикой тоже разберусь, только вот не могу понять того, как реализовать то, о чем до этого говорили

И здесь похоже перестановка

не по имени :thinking: