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

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

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

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

В общем, создаю файл. Потом через функцию 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2012, 00:38
Ответы с готовыми решениями:

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

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

C++ работа с файлами, вывод слов
ку всем, не работает вывод, хочу вывести определенную букву слова, но вместо буквы получаю ничего... вот код: #include &lt;fstream&gt;...

15
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
01.06.2012, 00:50
Попробуй в пути к файлу про экранировать все символы.
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  [ТС]
Цитата Сообщение от 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
Цитата Сообщение от 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  [ТС]
Изменений особых нету.. после того как убрал список.. ):
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
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 15:40
У меня именно этот код работает успешно. Может быть, вы данные набираете как-то неправильно или фамилии слишком длинные?

Вообще-то, если файл изначально не существует всё работает. А если существует, но пустой - нет. Судя по всему, количество записей в начале файла записывается неверно...
Миниатюры
Работа с файлами. Неверный вывод.  
1
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 15:46
Надо поменять местами блоки кода таким образом:
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  [ТС]
да, вроде теперь выводит на экране адекватное что-то, спасибо большое!
а вот что делать в самом текстовом файле? там опять какая-то абракадабра записывается ):
0
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 16:23
Это нормальное положение вещей. Например, строка из 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  [ТС]
Цитата Сообщение от 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
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 18:31
Да, будут. Если хочется полностью текстового файла, можно переводить числа в текст и записывать их в строку через разделитель. Но это будет сложнее реализовать.
Иванов,Русский,20,1,1998
Петров,Немецкий,1,8,2005
1
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 19:51  [ТС]
Цитата Сообщение от 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
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 20:17
Ну, если разрешено использовать 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  [ТС]
Цитата Сообщение от 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
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 20:52
Для вывода на экран можно выбрать пункт 2 в меню. Мне кажется, сортировке достаточно только сортировать.
1
 Аватар для akzhan
0 / 0 / 1
Регистрация: 14.05.2013
Сообщений: 27
30.05.2013, 12:22
а в яве можете сделать так же
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2013, 12:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru