@Timak31
студент

Сортировка в файле?

Не получаеться отсортироваь данные в файле имена по алфавиту. Но как на меня то все правильно.
Структура :
#pragma once
#include <iostream>

using namespace std;

struct database{
    char myName[124];
    char city[124];
	int age;
};

database recordIn(){
	database infa;
	cin.ignore();
	cout << "Name : ";
    cin >> infa.myName;
	cout << "City : ";
	cin >> infa.city;
	cout << "Age : ";
	cin >> infa.age;
	return infa;
}


Сама сортировка :
#pragma once
#include <fstream>
#include <cstring>
#include "structRecord.h"

using namespace std;

void sortFile(){
    fstream f("test.txt", ios::in | ios::binary);
    fstream f1("tes.txt", ios::out | ios::binary);
    database infa;
    database mas[124];
    int i=0;
    while(f.read((char*)&mas[i],sizeof(database))!= NULL){
        i++;
    }
    int n=i;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(strcmp(mas[j].myName, mas[j+1].myName) >0){
                infa=mas[j+1];
                mas[j+1]=mas[j];
                mas[j]=infa;
            }
        }
    }
    for(int i=0; i<n; i++){
        f1.write((char*)&mas[i],sizeof(database));
    }
f1.close();
    f.close();
    remove("test.txt");
    rename("tes.txt","test.txt");
}
  • Вопрос задан
  • 561 просмотр
Решения вопроса 1
@Timak31 Автор вопроса
студент
Ответ на вопрос
for(int i=0; i<n; i++){
        for(int j=0; j<n-1; j++){
            if(strcmp(mas[j].myName, mas[j+1].myName) >0){
                infa=mas[j+1];
                mas[j+1]=mas[j];
                mas[j]=infa;
            }
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сортировка конечно неэффективно реализована и выход за пределы массива есть, но работать вроде должна.
Значит запускайте отладчик и пошагово смотрите, что происходит. Или добавляйте в цикл вывод нужной информации и отслеживайте работу программы.
Ответ написан
Комментировать
@JoyceGraham
Ну первое что бросается в глаза, это выход за пределы массива в j + 1 при j = n - 1. Странно что не падает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы