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

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

Это как? :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:

Когда закрываю консоль, и запускаю снова, старые данные не видны

Так сразу-же говорили бульбочкой нужно

Так переставлять и надо весь элемент.
Зачем присваивать кому-то чужое имя? :catshake:

Что есть старые данные?
Исходный текстовый файл?

он самый

Если эта проблема появилась после изменений, то надо показать текущий код )

Если передавать size=100, то все видно. Но тогда возвращается старая проблема)

Во Write из первого поста (который скорее Append или Add) не нужно передавать ни массив (не используется), ни size (он там странно используется, там просто бесконечный цикл до ввода 0).
В Read тоже не нужно size передавать, он его вернуть должен.

2 сообщения было перенесено в новую тему: Как удалить строку из файла?

Разберетесь с выводом, посмотрите, может так лучше будет организовать процедуры
Delete, Edit

int Delete(Phone* Myphone, int size, int index)
{
    for (int i = index; 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;
    }
    cout << "Contact was succesfully deleted\n";
return size-1;
}

//оставил 3 параметра вызова, но по факту надо только 1,3
void Edit(Phone* Myphone, int size, int index)
{
    string res;
    string new_name;
    string new_number;
    string new_email;
        cout << "Enter new name\n";
        getline(cin, new_name);
        cout << "Enter new number\n";
        cin >> new_number;
        cout << "Enter new E-mail\n";
        cin >> new_email;
        Myphone[index].FIO = new_name;
        Myphone[index].number = new_number;
        Myphone[index].email = new_email;
        cout << "Contact was succesfully edited\n";
}