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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Катенько
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 15
#1

Задача с файлами в с++ - C++

17.09.2013, 14:28. Просмотров 736. Ответов 6
Метки нет (Все метки)

Ребята помогите решить задачу Вроде все правильно, но в самом конце не выводит данные из файла "File 1" а из файла 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
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <tchar.h>
using namespace std;
 
int main () {
struct student1 {
    char fam[15];
    char name[15];
    int kurs,fiz,mat,prog;
};
 
struct student2 {
    char fam[15];
    char name[15];
    char pol[10];
    int god;
};
    FILE *in, *out;
    int i,n;
 
    //ÏðåîáðГ*çîâГ*Г*ГЁГҐ òåêñòîâîãî ГґГ*éëГ* file1.txt Гў äâîè÷Г*ûé file1.dat
    student1 a;
    int s=sizeof(a);
    out=fopen("file1.dat", "w+b");
    if ((in=fopen("file1.txt", "r")) != NULL)
    { cout<<"VVedite kol-vo studentov: "; cin>>n;
        while (fgets(a.fam,15,in) != NULL)
        {   for (i=1;i<=n;i++) 
            {  
            fgets(a.name, 15, in);
            cout<<"Vvedite danie: "<<endl;
            cout<<"fam= ";
            cin>>a.fam;
            cout<<"name= ";
            cin>>a.name;
            cout<<"Kurs= ";
            cin>>a.kurs;
            cout<<"Ocenki "; 
            cin>>a.fiz>>a.mat>>a.prog;
            fwrite(&a,s,1,out);
            }
        }
    }
//  fclose(in);
//  fclose(out);
 
 
    //ÏðåîáðГ*çîâГ*Г*ГЁГҐ òåêñòîâîãî ГґГ*éëГ* file2.txt Гў äâîè÷Г*ûé file2.dat
    student2 b;
    s=sizeof(b);
    out=fopen("file2.dat", "w+b");
    if ((in=fopen("file2.txt", "r")) != NULL)
    {  cout<<"VVedite kol-vo studentov: "; cin>>n;
        while (fgets(b.fam,15,in) != NULL)
        {   for (i=1;i<=n;i++) 
            {
            fgets(b.name, 15, in);
            cout<<"Vvedite danie: "<<endl;
            cout<<"fam= ";
            cin>>b.fam;
            cout<<"name= ";
            cin>>b.name;
            cout<<"Pol= ";
            cin>>b.pol;
            cout<<"God rozdeniya "; 
            cin>>b.god;
            fwrite(&b,s,1,out);
            }
        }
    }
//  fclose(in);
//  fclose(out);  
    
    rewind(in);
    rewind(out);
    cout<<"\n File 1: \n";
    i=1;
    while (fread((char *)(&a),sizeof(a),1,in))
       {
            cout<<i<<". "<<a.fam<<", "<<a.name<<", "<<a.kurs<<", "<<a.fiz<<", "<<a.mat<<", "<<a.prog<<endl;
            i++;
        }         
        
     rewind(in);
     rewind(out);
     cout<<"\n File 2: \n";
     i=1;
     while (fread((char *)(&b),sizeof(b),1,out))
       {
            cout<<i<<". "<<b.fam<<", "<<b.name<<", "<<b.pol<<", "<<b.god<<endl;
            i++;
        }      
    getch();
    return 0;
}
Добавлено через 12 минут
Немного передалала.
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <tchar.h>
using namespace std;
 
int main () {
struct student1 {
    char fam[15];
    char name[15];
    int kurs,fiz,mat,prog;
};
 
struct student2 {
    char fam[15];
    char name[15];
    char pol[10];
    int god;
};
    FILE *in, *out;
    int i,n;
 
    //ÏðåîáðГ*çîâГ*Г*ГЁГҐ òåêñòîâîãî ГґГ*éëГ* file1.txt Гў äâîè÷Г*ûé file1.dat
    student1 a;
    int s=sizeof(a);
    out=fopen("file1.dat", "w+b");
    if ((in=fopen("file1.txt", "r")) != NULL)
    { cout<<"VVedite kol-vo studentov: "; cin>>n;
        while (fgets(a.fam,15,in) != NULL)
        {   for (i=1;i<=n;i++) 
            {  
            fgets(a.name, 15, in);
            cout<<"Vvedite danie: "<<endl;
            cout<<"fam ";
            cin>>a.fam;
            cout<<"name ";
            cin>>a.name;
            cout<<"Kurs ";
            cin>>a.kurs;
            cout<<"Ocenka fiz "; 
            cin>>a.fiz;
            cout<<"Ocenka mat "; 
            cin>>a.mat;
            cout<<"Ocenka prog "; 
            cin>>a.prog;
            fwrite(&a,s,1,out);
            }
        }
    }
//  fclose(in);
//  fclose(out);
 
 
    //ÏðåîáðГ*çîâГ*Г*ГЁГҐ òåêñòîâîãî ГґГ*éëГ* file2.txt Гў äâîè÷Г*ûé file2.dat
    student2 b;
    s=sizeof(b);
    out=fopen("file2.dat", "w+b");
    if ((in=fopen("file2.txt", "r")) != NULL)
    {  cout<<"VVedite kol-vo studentov: "; cin>>n;
        while (fgets(b.fam,15,in) != NULL)
        {   for (i=1;i<=n;i++) 
            {
            fgets(b.name, 15, in);
            cout<<"Vvedite danie: "<<endl;
            cout<<"fam ";
            cin>>b.fam;
            cout<<"name ";
            cin>>b.name;
            cout<<"Pol ";
            cin>>b.pol;
            cout<<"God rozdeniya "; 
            cin>>b.god;
            fwrite(&b,s,1,out);
            }
        }
    }
//  fclose(in);
//  fclose(out);  
    
    rewind(in);
    rewind(out);
    cout<<"\n File 1: \n";
    i=1;
    while (fread((char *)(&a),sizeof(a),1,in))
       {
            cout<<i<<". "<<a.fam<<", "<<a.name<<", "<<a.kurs<<", "<<a.fiz<<", "<<a.mat<<", "<<a.prog<<endl;
            i++;
        }         
        
     rewind(in);
     rewind(out);
     cout<<"\n File 2: \n";
     i=1;
     while (fread((char *)(&b),sizeof(b),1,out))
       {
            cout<<i<<". "<<b.fam<<", "<<b.name<<", "<<b.pol<<", "<<b.god<<endl;
            i++;
        }      
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
17.09.2013, 14:33     Задача с файлами в с++ #2
Катенько, может быть стоит попробовать выводить через файловые потоки? (fstream)
Катенько
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 15
17.09.2013, 14:41  [ТС]     Задача с файлами в с++ #3
Я не совсем понимаю о чем Вы. Может есть небольшой пример?
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
17.09.2013, 15:00     Задача с файлами в с++ #4
Работать с файлами через средства С++ значительно удобнее... Почитайте http://informatics.mccme.ru/moodle/m...iew.php?id=579

Добавлено через 49 секунд
Думаю, что проблема отпадет сама собой.

Добавлено через 9 минут
Единственное на что хочу обратить ваше внимание, это то что перегруженный оператор смещения игнорирует символы пробела, табуляции и прочие, если вам потребуется разделять пробелами данные в файле (или читать с пробелами), то воспользуйтесь функциями get(), getline(), read(), put(), write() на ваш выбор.

C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
using namespace std;
int main()
{
    ifstream input("123.txt");
    input.get();
    input.read();
    ofstream output("123.txt");
    output.put();
    output.write();
}
Эти функции не игнорируют пробелы в потоке.
Катенько
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 15
17.09.2013, 15:34  [ТС]     Задача с файлами в с++ #5
Спасибо за Ваше старание! Очень помогло! А вот еще вопрос - почему при моем выводе в задаче, выводится только последний файл? Вроде код написано идентично с первым, соответственно изменено только имя файла и его переменная. Может я что-то не досмотрела?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
17.09.2013, 15:50     Задача с файлами в с++ #6
Пёс, вообще-то, автору нужны двоичные файлы.
И чем это так тебе не удобна работа с файлами в языке Си?
Может ты просто не умеешь с ними работать?

Добавлено через 2 минуты
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 16:29     Задача с файлами в с++
Еще ссылки по теме:
Задача со структурами и работой с файлами C++
Задача на работу с текстовыми файлами C++
Задача с файлами и функциями по системному программированию C++
C++ Почему компилятор работает с файлами *.с, а не с файлами *.срр?
Переделать работу с текстовыми файлами под работу с двоичными файлами C++

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

Или воспользуйтесь поиском по форуму:
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
17.09.2013, 16:29     Задача с файлами в с++ #7
Kuzia domovenok, всё может быть, но здесь форум по С++, а не по С
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Пёс, вообще-то, автору нужны двоичные файлы.
C++
1
std::ofstream file(filename, std::ios::out|std::ios::binary);
Yandex
Объявления
17.09.2013, 16:29     Задача с файлами в с++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru