Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
01.06.2012, 00:38     Работа с файлами. Неверный вывод. #1
Всем доброго времени суток!
Ребят, нужна ваша помощь!

В общем, создаю файл. Потом через функцию 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 00:38     Работа с файлами. Неверный вывод.
Посмотрите здесь:

работа с файлами C++
[С++] Работа с файлами C++
Научите работать с файлами(создание , ввод, вывод и т.д.) C++
работа с файлами C++
C++ С++ работа с файлами (поиск и вывод чисел в файле)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avg93
61 / 61 / 10
Регистрация: 11.12.2009
Сообщений: 247
Завершенные тесты: 3
01.06.2012, 00:50     Работа с файлами. Неверный вывод. #2
Попробуй в пути к файлу про экранировать все символы.
C++
1
char *filename="C/://games//arar.txt";
Так как из
C++
1
/arar.txt"
/а - будет воспринято как звуковой сигнал.
intnower
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 минуты
что же Я делаю не так? ):
avg93
61 / 61 / 10
Регистрация: 11.12.2009
Сообщений: 247
Завершенные тесты: 3
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; и посмотреть что получится.
intnower
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 $э   Л
Помогите, пожалуйста!
Миниатюры
Работа с файлами. Неверный вывод.  
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 15:40     Работа с файлами. Неверный вывод. #6
У меня именно этот код работает успешно. Может быть, вы данные набираете как-то неправильно или фамилии слишком длинные?

Вообще-то, если файл изначально не существует всё работает. А если существует, но пустой - нет. Судя по всему, количество записей в начале файла записывается неверно...
Миниатюры
Работа с файлами. Неверный вывод.  
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 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);
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
02.06.2012, 16:15  [ТС]     Работа с файлами. Неверный вывод. #8
да, вроде теперь выводит на экране адекватное что-то, спасибо большое!
а вот что делать в самом текстовом файле? там опять какая-то абракадабра записывается ):
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 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));
        }
    };
То есть предварительно записав туда нулевые байты. В любом случае, числа записываются в двоичном виде, а не в текстовом, и часть нечитаемых символов останется в файле.
intnower
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));
        }
    };
То есть предварительно записав туда нулевые байты. В любом случае, числа записываются в двоичном виде, а не в текстовом, и часть нечитаемых символов останется в файле.
т.е в текстовом файле все равно будут странные символы в двоичном виде?
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 18:31     Работа с файлами. Неверный вывод. #11
Да, будут. Если хочется полностью текстового файла, можно переводить числа в текст и записывать их в строку через разделитель. Но это будет сложнее реализовать.
Иванов,Русский,20,1,1998
Петров,Немецкий,1,8,2005
intnower
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);
}
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 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;
}
intnower
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;
}
спасибо! Но вот не как не могу понять, как нужно вывести результат на экран (:
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
02.06.2012, 20:52     Работа с файлами. Неверный вывод. #15
Для вывода на экран можно выбрать пункт 2 в меню. Мне кажется, сортировке достаточно только сортировать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 12:22     Работа с файлами. Неверный вывод.
Еще ссылки по теме:

C++ С++ Работа с Файлами(запись\вывод)
C++ Работа с текстовыми файлами: Вывод из текстового файла
C++ Работа с файлами: ввод/вывод структур ("Город")

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

Или воспользуйтесь поиском по форуму:
akzhan
 Аватар для akzhan
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 27
30.05.2013, 12:22     Работа с файлами. Неверный вывод. #16
а в яве можете сделать так же
Yandex
Объявления
30.05.2013, 12:22     Работа с файлами. Неверный вывод.
Ответ Создать тему
Опции темы

Текущее время: 03:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru