Списки: вывод, заполнение, поиск в списке - C++

260
25 апреля 2017, 08:45

Здравствуйте, может кто-то рассказать и показать как правильно заполнять, выводить список который основан на структуре с 5 элементами разных типов, например:

struct my {
    char name[20]; 
    float amount;
    int number;
}; 

и как искать элементы списка.

void search(float point){
        Students *tmp=head;
        while (tmp!=0){
            //for (int a=0;a<3;a++){
            if (tmp->average_point>point){
                cout << "Match";
                cout << tmp->average_point;
                search(point);
                break;
            }
            else{
                tmp=tmp->Next;
            }
        }
    } 

при таком поиске выводится только один элемент, а как сделать что бы выводились все элементы которые попадают в условие?

Answer 1

Попробуйте так. Оператор break, после первого нахождения прерывал вам цикл. Выполнялось только тогда, когда if не совпадал, не правильно, должно выполняться в любом случае.

else{
            tmp=tmp->Next;
        }

И мне не понятно зачем вы вызываете опять функцию search(point);

Вот переделал, что вышло у меня

void search(float point){
            Students *tmp=head;
            while (tmp!=0){
                //for (int a=0;a<3;a++){
                if (tmp->average_point>point){
                    cout << "Match";
                cout << tmp->average_point;
}
                tmp=tmp->Next;
        }
    } 
Answer 2

Вот вам пример, правда я тут использую класс person вместо структуры, а в качестве списка(массива) у меня выступает Vector. Ну вы можете спокойно использовать другие виды списков(листы, очередь), всё зависит от ситуации.

  //Запись в файл
        void RabotaAccount::wrt()
        {
           vector <person>::iterator iter1;
           ofstream file;
           file.open("GROUP.DAT", ios::trunc);
            int n = 0;
            iter1 = persVector.begin();
                while(iter1 != persVector.end())
                {
                    cout << (*iter1);
                    file.write( reinterpret_cast<char*>(&(*iter1)), sizeof((*iter1)) );
                    *iter1++;
                    n++;
            }
            cout << n <<endl;
        persVector.clear();
        file.close();
    }

    //вывод данных в память
void RabotaAccount::readPolz()
{
    person pers;
    fstream file;
    persVector.clear();
    file.open("GROUP.DAT", ios::app | ios::out |
                                      ios::in);
    file.seekg(0);                 //reset to start of file
                                  //read first person
   file.read( reinterpret_cast<char*>(&pers), sizeof(pers) );
   while( !file.eof() )           //quit on EOF
      {
             //display person
      persVector.push_back(pers);
               //read another person
      file.read( reinterpret_cast<char*>(&pers), sizeof(pers) );
      }
    file.close();
}
READ ALSO
Как прочитать строку из консоли целиком, а не только первое слово?

Как прочитать строку из консоли целиком, а не только первое слово?

Необходимо считать строку формата: Фамилия "пробел" Инициалы(СН

232
Передача файлов по TCP Qt

Передача файлов по TCP Qt

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

349
Как удалить символ

Как удалить символ

Как удалить символ в массиве *сhar с использованием пользовательской функции?

269
Регистрация сайта в поисковых системах

Регистрация сайта в поисковых системах

Добавление сайта в известные поисковые системы Google, Yandex, Bing, Yahoo, ...

2755