Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
1

Работа с файлами. Неверный вывод.

01.06.2012, 00:38. Показов 1386. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Ребят, нужна ваша помощь!

В общем, создаю файл. Потом через функцию addClient добавления нового клиента в конец файла создаю структуру. Ввожу фамилию, язык, день, месяц, год. Потом вывожу все, что ввёл в функции showLib. и у меня выводит нечто очень странное: много букв М и какие-то непонятные цифры.. Помогите, пожалуйста, в чем дело?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <conio.h>
#include <string.h>
#include <windows.h>
using namespace std;
void loadLib(); 
void saveLib();
char *filename="C:/games/arar.txt";
struct language //структура ЯЗЫК
    {
        char name[30], lang[30];
        int day, month, year;
        language *next;
    };
 language *head, *tmp, *current; //указателя для организации односвязного списка языков
 int nCount; // переменная для хранения количества человек
 
//начальная инициализация файла библиотеки
 
 void initLib ()
{
    FILE *fp;
    fp = fopen (filename,"r");
    if (fp == NULL) //если файл не существует
    {
        nCount = 0;
        fp = fopen (filename,"w");  //создаем его
        if (fp == NULL)
            {
                cout << "Ошибка создания файла библиотеки. Программа будет закрыта!";
                _getch ();
                exit (1);
            }
        fwrite (&nCount, sizeof(int), 1, fp);   //заносим в начало нового файла, количество клиентов в нем - 0
    }
 
    else
        fread (&nCount, sizeof(nCount), 1, fp); //из существующего файла считываем количество клиентов
    fclose (fp);
}
 
 //функция, отображающая клиентов из файла библиотеки
 
 void showLib()
{ 
    int i;
    language b;
    FILE *fp;
    cout << endl << "Список клиентов в библиотеке:" << endl;
    if (nCount == 0) cout << "В списке нет клиентов";
    else
        {   
            fp = fopen (filename,"r");
            if (fp == NULL) cout << "Ошибка чтения данных из файла";
            else
                {
                    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
                    for(i=0; i<nCount; i++) //перебираем всех клиентов из файла
                        {
                            fread (&b, sizeof(language), 1, fp);
                            cout << i+1 << ") " << b.name << "  " << b.lang << " язык  " << b.day << "." << b.month << "." << b.year << "." << endl;
                        }
                    fclose (fp);
                }
        }
     cout << endl;
}
 
//функция добавления нового клиента в конец файла
 
void addClient()
{   FILE *fp;
    language b;
  char ch;
  fp = fopen (filename,"r");
  if (fp == NULL)
    cout<<"Ошибка чтения данных из файла";
  else
   {
   do
    { //вводим информацию об очередном клиенте
      system ("cls"); 
      cin.sync ();
      cout << "Введите данные о клиенте." << endl;
      cout << "Фамилия:" << '\t'; cin.getline (b.name, 29);
      cout << "Изучающий язык:" << '\t'; cin.getline (b.lang, 29);
      cout << "Дата рождения:" << endl;
      cout << "День:" << '\t'; cin >> b.day;
      cout << "Месяц:" << '\t' ; cin >> b.month;
      cout << "Год:"<< '\t' ; cin >>b.year;
      nCount++;
      //заносим информацию об очередном клиенте в конец файла
      fseek(fp,0,SEEK_END);
      fwrite(&b, sizeof(language), 1, fp);
      //заносим информацию о количестве книг в начало файла
      fseek(fp,0,SEEK_SET);
      fwrite (&nCount, sizeof(int), 1, fp);
      cout << "\nВвести данные о еще одном клиенте (д/н)?" << endl;
      ch=_getche();
    }
   while (ch=='Д' || ch=='д'); //можно ввести данные о нескольких книгах
   fclose (fp);
  }
   cout<<endl;
}
 
 
int main()
{
SetConsoleCP(1251);  
 SetConsoleOutputCP (1251); 
setlocale (LC_ALL, "Russian");
 
    char ch='0';
    initLib ();  
    showMenu ();    //выводим меню
    ch=_getch ();
    while (ch!='6')
    {
        
         switch (ch)     //в зависимости от выбора пользователя вызываем функцию
        {
            case '1': addClient(); break;
            case '2': showLib(); break;
            case '3': findClient(1); break;
            default: cout << "Неверный ввод!!!" << endl;
        }
        cout << "Нажмите любую клавишу ...";
        _getch ();
        system ("cls"); 
        showMenu ();      //выводим меню
        ch=_getch ();
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2012, 00:38
Ответы с готовыми решениями:

Работа с файлами. Вывод
У меня есть файл, к примеру с таким содержанием: Строка 1 Строка2 ... Строка n Как вывести их...

Ввод вывод.Работа с файлами
Вот я ввожу данные . Но как их записать в файл? ofstream fot(&quot;database.txt&quot;,ios_base::out |...

C++ работа с файлами, вывод слов
ку всем, не работает вывод, хочу вывести определенную букву слова, но вместо буквы получаю...

Работа с файлами, ввод/вывод
Подскажите пожалуйста, как мне правильно написать программу: В файле содержится информация о...

15
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
01.06.2012, 00:50 2
Попробуй в пути к файлу про экранировать все символы.
C++
1
char *filename="C/://games//arar.txt";
Так как из
C++
1
/arar.txt"
/а - будет воспринято как звуковой сигнал.
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 00:57  [ТС] 3
Цитата Сообщение от avg93 Посмотреть сообщение
Попробуй в пути к файлу про экранировать все символы.
C++
1
char *filename="C/://games//arar.txt";
Так как из
C++
1
/arar.txt"
/а - будет воспринято как звуковой сигнал.
исправил
C++
1
char *filename="C://games//arar.txt"
;, все равно выводит тоже самое..
в
b.name
b.lang
b.day
b.month b.year заносятся какие-то непонятные значения.. ):

Добавлено через 23 часа 24 минуты
что же Я делаю не так? ):
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
02.06.2012, 12:18 4
Цитата Сообщение от intnower Посмотреть сообщение
C++
1
2
3
4
5
6
struct language //структура ЯЗЫК
 {
 char name[30], lang[30];
 int day, month, year;
 language *next;
 };
Это же список. Попробуй в процедуре добавления создать переменную такой же структуры но без указателя на следующий елемент. Короче говоря попробуй убрать language *next; и посмотреть что получится.
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 14:46  [ТС] 5
Изменений особых нету.. после того как убрал список.. ):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <conio.h>
#include <string.h>
#include <windows.h>
using namespace std;
void loadLib(); 
void saveLib();
char *filename="txt.txt";
struct language //структура ЯЗЫК
    {
        char name[30], lang[30];
        int day, month, year;
    };
 int nCount; // переменная для хранения количества человек
 
 //функция отображения меню
 
 void showMenu ()
{
    cout << "Выберете действие:" << endl << endl;
    cout << "1. Ввести элементы списка" << endl;
    cout << "2. Вывести список на экран" << endl;
    cout << "3. Вывести клиентов с заданным языком" << endl;
    cout << "4. Отстортировать список клиентов по возрастам" << endl;
    cout << "5. Удалить клиента" << endl;
    cout << "6. Выйти" << endl;
}
 
 //начальная инициализация файла библиотеки
 
 void initLib ()
{
    FILE *fp;
    fp = fopen (filename,"r");
    if (fp == NULL) //если файл не существует
    {
        nCount = 0;
        fp = fopen (filename,"w");  //создаем его
        if (fp == NULL)
            {
                cout << "Ошибка создания файла библиотеки. Программа будет закрыта!";
                _getch ();
                exit (1);
            }
        fwrite (&nCount, sizeof(int), 1, fp);   //заносим в начало нового файла, количество клиентов в нем - 0
    }
 
    else
        fread (&nCount, sizeof (nCount), 1, fp); //из существующего файла считываем количество клиентов
    fclose (fp);
}
 
 //функция, отображающая клиентов из файла библиотеки
 
 void showLib()
{ 
    int i;
    language b;
    FILE *fp;
    cout << endl << "Список клиентов в библиотеке:" << endl;
    if (nCount == 0) cout << "В списке нет клиентов";
    else
        {   
            fp = fopen (filename,"r");
            if (fp == NULL) cout << "Ошибка чтения данных из файла";
            else
                {
                    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
                    for(i=0; i<nCount; i++) //перебираем всех клиентов из файла
                        {
                            fread (&b, sizeof(language), 1, fp);
                            cout << i+1 << ") " << b.name << "  " << b.lang << " ЯЗЫК  " << b.day << "." << b.month << "." << b.year << "." << endl;
                        }
                    fclose (fp);
                }
        }
     cout << endl;
}
 
 //функция добавления нового клиента в конец файла
 
 void addClient()
{   FILE *fp;
    language b;
  char ch;
  fp=fopen(filename,"r+");
 
   do
    { //вводим информацию об очередной книге
      system("cls"); 
      cin.sync();
      cout<<"Введите sданные о клиенте."<<endl;
      cout<<"Фамилия: \t" ; cin.getline(b.name, 29);
      cout<<"Язык: \t"; cin.getline(b.lang, 29);
      cout<<"День: \t"; cin>>b.day;
      cout<<"Месяц: \t"; cin>>b.month;
      cout<<"Год: \t"; cin>>b.year;
      nCount++;
      //заносим информацию об очередной книге в конец файла
      fseek(fp,0,SEEK_END);
      fwrite(&b, sizeof(language), 1, fp);
      //заносим информацию о количестве книг в начало файла
      fseek(fp,0,SEEK_SET);
      fwrite(&nCount, sizeof(int), 1, fp);
      cout<<"\nВвести данные о еще одной книге (д/н)?";
      ch=_getche();
    }
   while(ch=='Д' || ch=='д'); //можно ввести данные о нескольких книгах
   fclose(fp);
   cout<<endl;
  }
   
 
int main()
{
    SetConsoleCP(1251);  //Устанавливаем кодировку для ввода
    SetConsoleOutputCP (1251); //Устанавливаем кодировку для вывода
    setlocale (LC_ALL, "Russian");
 
    char ch='0';
    initLib ();  
    showMenu ();    //выводим меню
    ch=_getch ();
    while (ch!='6')
    {
        
         switch (ch)     //в зависимости от выбора пользователя вызываем функцию
        {
            case '1': addClient(); break;
            case '2': showLib(); break;
            //case '3': findClient(1); break;
            //case '4': sortLib(); break;
            //case '5': delBook(); break;
            default: cout << "Неверный ввод!!!" << endl;
        }
        cout << "Нажмите любую клавишу ...";
        _getch ();
        system ("cls"); 
        showMenu ();      //выводим меню
        ch=_getch ();
    }
    return 0;
}

Вот так выглядит код..
у меня изначально пустой файл.. Я в него ввожу данные. Ввел данные о двух клиентах и вот результат, когда Я привожу в действие функцию showLib:





а в файле txt.txt записывается вот это: 
ов rњщ( I µr`TїrШщ( (“јr Немецкий (2&єrм’јr 1 ¬щ(  И Нров ’јrэ I µr`TїrPэ (“јr Немецкий 2&єrм’јr 1 $э   Л
Помогите, пожалуйста!
Миниатюры
Работа с файлами. Неверный вывод.  
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 15:40 6
У меня именно этот код работает успешно. Может быть, вы данные набираете как-то неправильно или фамилии слишком длинные?

Вообще-то, если файл изначально не существует всё работает. А если существует, но пустой - нет. Судя по всему, количество записей в начале файла записывается неверно...
Миниатюры
Работа с файлами. Неверный вывод.  
1
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 15:46 7
Надо поменять местами блоки кода таким образом:
C++
1
2
3
4
5
6
      //заносим информацию о количестве книг в начало файла
      fseek(fp,0,SEEK_SET);
      fwrite(&nCount, sizeof(int), 1, fp);
      //заносим информацию об очередной книге в конец файла
      fseek(fp,0,SEEK_END);
      fwrite(&b, sizeof(language), 1, fp);
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 16:15  [ТС] 8
да, вроде теперь выводит на экране адекватное что-то, спасибо большое!
а вот что делать в самом текстовом файле? там опять какая-то абракадабра записывается ):
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 16:23 9
Это нормальное положение вещей. Например, строка из 30 символов заполнена не полностью, и после символа окончания строки '\0' будет находится мусор. Его можно предотвратить так:
C++
1
2
3
4
5
6
7
8
9
10
11
struct language //структура ЯЗЫК
    {
        char name[30], lang[30];
        int day, month, year;
 
        language()
        {
            memset(name,0,sizeof(name));
            memset(lang,0,sizeof(lang));
        }
    };
То есть предварительно записав туда нулевые байты. В любом случае, числа записываются в двоичном виде, а не в текстовом, и часть нечитаемых символов останется в файле.
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 18:24  [ТС] 10
Цитата Сообщение от modwind Посмотреть сообщение
Это нормальное положение вещей. Например, строка из 30 символов заполнена не полностью, и после символа окончания строки '\0' будет находится мусор. Его можно предотвратить так:
C++
1
2
3
4
5
6
7
8
9
10
11
struct language //структура ЯЗЫК
    {
        char name[30], lang[30];
        int day, month, year;
 
        language()
        {
            memset(name,0,sizeof(name));
            memset(lang,0,sizeof(lang));
        }
    };
То есть предварительно записав туда нулевые байты. В любом случае, числа записываются в двоичном виде, а не в текстовом, и часть нечитаемых символов останется в файле.
т.е в текстовом файле все равно будут странные символы в двоичном виде?
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 18:31 11
Да, будут. Если хочется полностью текстового файла, можно переводить числа в текст и записывать их в строку через разделитель. Но это будет сложнее реализовать.
Иванов,Русский,20,1,1998
Петров,Немецкий,1,8,2005
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 19:51  [ТС] 12
Цитата Сообщение от modwind Посмотреть сообщение
Да, будут. Если хочется полностью текстового файла, можно переводить числа в текст и записывать их в строку через разделитель. Но это будет сложнее реализовать.
спасибо большое за помощь!

Добавлено через 2 минуты
остался только последний вопрос (:
чтобы произвести сортировку, к примеру по году рождения, прокатит ли такой код:
// сортировка методом пузырька

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void SortLib ()
{
    int i,j;
    FILE *fp;
    fp = fopen (filename,"r");
    language box[nCount], n;
 
    for (i=nCoutn-1; i>0; i--)
            for(j=0; j<i; j++)
                {
                    if (box[j].year < box[j+1].year)
                        {
                            n = box[j+1];
                            box[j+1] = box[j];
                            box[j] = n;
                        }
                }
            for (i=0; i<nCount; i++)
                {
                    cout << endl;
                    cout << "Год:" << box[i].year << '\t'; 
                    cout << "Фамилия:" << box[i].name << '\t';
                    cout << endl << endl;
                }
            fclose(fp);
}
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 20:17 13
Ну, если разрешено использовать c++, я бы написал проще. Считываем все записи, сортируем и записываем обратно в файл. Функция сортировки есть стандартная, sort, надо только подключить файл algorithm и указать правильное условие сортировки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <algorithm>
 
bool isLess(language i,language j)
{
    if (i.year<j.year) return true;
    if (i.year>j.year) return false;
    if (i.month<j.month) return true;
    if (i.month>j.month) return false;
    if (i.day<j.day) return true;
    if (i.day>j.day) return false;
    return false;
}
 
 void sortLib ()
{
    FILE *fp;
 
    fp = fopen (filename,"r+");
    language* box=new language[nCount];
    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
    fread(box,sizeof(language),nCount,fp);
 
    sort(box, box+nCount, isLess);
 
    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
    fwrite(box,sizeof(language),nCount,fp);
    fclose(fp);
    delete box;
}
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 20:46  [ТС] 14
Цитата Сообщение от intnower Посмотреть сообщение
спасибо большое за помощь!

Добавлено через 2 минуты
остался только последний вопрос (:
чтобы произвести сортировку, к примеру по году рождения, прокатит ли такой код:
// сортировка методом пузырька

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void SortLib ()
{
    int i,j;
    FILE *fp;
    fp = fopen (filename,"r");
    language box[nCount], n;
 
    for (i=nCoutn-1; i>0; i--)
            for(j=0; j<i; j++)
                {
                    if (box[j].year < box[j+1].year)
                        {
                            n = box[j+1];
                            box[j+1] = box[j];
                            box[j] = n;
                        }
                }
            for (i=0; i<nCount; i++)
                {
                    cout << endl;
                    cout << "Год:" << box[i].year << '\t'; 
                    cout << "Фамилия:" << box[i].name << '\t';
                    cout << endl << endl;
                }
            fclose(fp);
}
судя по всему так не прокатит.. Я же изначально в массив структур заносил данные..
как же произвести сортировку по году?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <conio.h>
#include <string.h>
#include <windows.h>
using namespace std;
void loadLib(); 
void saveLib();
char *filename="heh.txt";
struct language //структура ЯЗЫК
    {
        char name[30];
        char lang[30];
        int day;
        int month;
        int year;
 
        language()
        {
            memset(name,0,sizeof(name));
            memset(lang,0,sizeof(lang));
        }
    };
 
 int nCount; // переменная для хранения количества клиентов
 
void addClient()
{   FILE *fp;
    fp = fopen (filename,"r");
    language b;
  char ch;
  fp=fopen(filename,"r+");
 
   do
    { //вводим информацию об очередном клиенте
      system("cls"); 
      cin.sync();
      cout<<"Введите sданные о клиенте."<<endl;
      cout<<"Фамилия: \t" ; cin.getline(b.name, 29);
      cout<<"Язык: \t"; cin.getline(b.lang, 29);
      cout<<"День: \t"; cin>>b.day;
      cout<<"Месяц: \t"; cin>>b.month;
      cout<<"Год: \t"; cin>>b.year;
      nCount++;
      //заносим информацию о количестве клиентов в начало файла
      fseek(fp,0,SEEK_SET);
      fwrite(&nCount, sizeof(int), 1, fp);
      //заносим информацию об очередном клиенте в конец файла
      fseek(fp,0,SEEK_END);
      fwrite(&b, sizeof(language), 1, fp);
      
      cout<<"\nВвести данные о еще одной книге (д/н)?";
      ch=_getche();
    }
   while(ch=='Д' || ch=='д'); //можно ввести данные о нескольких клиентов
   fclose(fp);
   cout<<endl;
  }
 
void showLib()
{ 
    int i;
    language b;
    FILE *fp;
    fp = fopen (filename,"r");
    cout << endl << "Список клиентов в библиотеке:" << endl;
    if (nCount == 0) cout << "В списке нет клиентов";
    else
        {   
            fp = fopen (filename,"r");
            if (fp == NULL) cout << "Ошибка чтения данных из файла";
            else
                {
                    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
                    for(i=0; i<nCount; i++) //перебираем всех клиентов из файла
                        {
                            fread (&b, sizeof(language), 1, fp);
                            cout << i+1 << ") " << b.name << "  " << b.lang << " язык  " << b.day << "." << b.month << "." << b.year << "." << endl;
                        }
                    fclose (fp);
                }
        }
        cout <<"Количество клиентов - " << nCount;
        cout << endl;
 
}
 
int main()
{
    SetConsoleCP(1251);  //Устанавливаем кодировку для ввода
    SetConsoleOutputCP (1251); //Устанавливаем кодировку для вывода
    setlocale (LC_ALL, "Russian");
 
    char ch='0';
    initLib ();  
    showMenu ();    //выводим меню
    ch=_getch ();
    while (ch!='5')
    {
        
         switch (ch)     //в зависимости от выбора пользователя вызываем функцию
        {
            case '1': addClient(); break;
            case '2': showLib(); break;
            case '4': SortLib(); break;
            default: cout << "Неверный ввод!!!" << endl;
        }
        cout << "Нажмите любую клавишу ...";
        _getch ();
        system ("cls"); 
        showMenu ();      //выводим меню
        ch=_getch ();
    }
    return 0;
}
Тут Я создаю информацию о клиентах и вывожу её на экран..
из этого теперь возможно сделать сортировку?

Добавлено через 12 минут
Цитата Сообщение от modwind Посмотреть сообщение
Ну, если разрешено использовать c++, я бы написал проще. Считываем все записи, сортируем и записываем обратно в файл. Функция сортировки есть стандартная, sort, надо только подключить файл algorithm и указать правильное условие сортировки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <algorithm>
 
bool isLess(language i,language j)
{
    if (i.year<j.year) return true;
    if (i.year>j.year) return false;
    if (i.month<j.month) return true;
    if (i.month>j.month) return false;
    if (i.day<j.day) return true;
    if (i.day>j.day) return false;
    return false;
}
 
 void sortLib ()
{
    FILE *fp;
 
    fp = fopen (filename,"r+");
    language* box=new language[nCount];
    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
    fread(box,sizeof(language),nCount,fp);
 
    sort(box, box+nCount, isLess);
 
    fseek(fp, sizeof(int), SEEK_SET); //пропускаем целое число количество клиентов в начале файла
    fwrite(box,sizeof(language),nCount,fp);
    fclose(fp);
    delete box;
}
спасибо! Но вот не как не могу понять, как нужно вывести результат на экран (:
0
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 20:52 15
Для вывода на экран можно выбрать пункт 2 в меню. Мне кажется, сортировке достаточно только сортировать.
1
0 / 0 / 1
Регистрация: 14.05.2013
Сообщений: 27
30.05.2013, 12:22 16
а в яве можете сделать так же
0
30.05.2013, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2013, 12:22
Помогаю со студенческими работами здесь

Работа с Файлами (запись/вывод)
Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также,...

Работа с файлами, необычный вывод из файла
Дан текстовый файл и три переменные. Нужно вывести из каждой строки файла слово, номер которого...

Работа с типизированными файлами. Вывод в файл
program tip; uses crt; type rec=record N:integer; Nr:string; type1:string; cena:integer;...

Работа с файлами.Ввод,вывод в файл
Ввод/вывод в файл Что то не очень доходит...почитала там сайты всякие по теме, все равно не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru