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

Сравнение строк в структуре, чтение из файла - C++

Восстановить пароль Регистрация
 
Noirman
0 / 0 / 0
Регистрация: 03.03.2009
Сообщений: 31
05.03.2013, 16:18     Сравнение строк в структуре, чтение из файла #1
Требуется написать программу, которая считывает из файла данные о студентах, сортирует их по фамилии и выводит их на экран. Далее нужно найти однофамильцев в группе и вывести данные о них на экран. Проблемы, собственно, две:
1. Не могу сделать чтение файла через eof (только статичное определение числа записей).
2. Функция поиска однофамильцев (void poisk()) работает неправильно.

Подскажите, что я сделал неправильно?

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
#include <iostream>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
struct student
{
    char fam[20];
    int vozrast;
    char gruppa[5];
    double ball;
};
 
 
void read(student *stud, int n, int i)
{
 ifstream in("file.txt");  
    if(!in)
    {
        cout<<"File can not be open\n"; 
       
    }                                          
  
    
      for(i = 0; i < n; i++)
    { 
    in >> stud[i].fam >> stud[i].vozrast >> stud[i].gruppa >> stud[i].ball;
   }
 
}
 
 
 void sort(student *stud, int n, int i, int j,student swap )
 {
    
    for(i = 0; i < n; i++)
      for(j = i + 1; j < n; j++)
       if (strcmp (stud[i].fam, stud[j].fam) > 0)
    
    {
        swap = stud[i];
        stud[i] = stud[j];
        stud[j] = swap;
    }
 }
 
 void out(student *stud,int n, int i)
{
    for(i = 0; i < n; i++)
   
        for(i = 0; i < n; i++)
    { 
    cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
    
     cout << endl;
    }
}
 
 void poisk(student *stud, int n, int i, int j)
{
    for(i = 0; i < n; i++)
    for(j = i + 1; j < n; j++)
    if (strcmp (stud[i].fam, stud[j].fam) == 0)
    {
       cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball;
cout << endl;
    }
 
}
 
 void poisk1(student *stud, int n, int i, char fama[20])
            {
            cout << "Enter surname" << endl;
    cin >> fama;
 
    for(i = 0; i < n; i++)
  
 if (strcmp (fama, stud[i].fam) == 0)
    {
    
     cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
             cout << endl;
 
    }
            }
 
 void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
student swap;  
int  i,j,k;
int key=0, n=8;
char fama[20];
 
student *stud = new student [n];
 
do
    {
        cout<<"1.Students\n2.Surname\n3.Search\n0.Exit\n";
        cin>>key;cin.ignore(1);
        switch(key)
        {
        case 1:
            cout << endl << "Surname Age Group Ball" << endl << endl;
            read(stud,n,i);
            sort(stud,n,i,j,swap);
            out(stud,n,i);
            break;
        case 2:
           read(stud,n,i);
           poisk(stud,n,i,j);
            break;
        case 3:
            read(stud,n,i);
            poisk1(stud,n,i,fama);
           break;
         case 0:
           break;
       
        }
 
    }while(key!=0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 16:18     Сравнение строк в структуре, чтение из файла
Посмотрите здесь:

чтение строк из файла C++
Чтение строк из файла C++
C++ Cтроки, сравнение, чтение из файла
C++ Чтение строк из бинарного файла.
C++ Сравнение переменных или чтение с файла?
C++ Чтение и сравнение символов из файла без использования массива
Сравнение строк в структуре C++
Чтение строк из файла C++
C++ Чтение из файла в список, сравнение с элементами списка
Чтение строк из файла C++
Чтение строк из файла C++
Сравнение строк в структуре C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Noirman
0 / 0 / 0
Регистрация: 03.03.2009
Сообщений: 31
05.03.2013, 16:38  [ТС]     Сравнение строк в структуре, чтение из файла #2
Файл, с которого программа считывает данные.
Вложения
Тип файла: txt file.txt (169 байт, 31 просмотров)
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.03.2013, 07:22     Сравнение строк в структуре, чтение из файла #3
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
struct student
{
    char fam[20];
    int vozrast;
    char gruppa[5];
    double ball;
};
 
void read(student *stud, int n)
{
    ifstream in("file.txt");  
    if(!in) cout << "File can not be open\n";
    
    for(int i = 0; i < n; i++)
        in >> stud[i].fam >> stud[i].vozrast >> stud[i].gruppa >> stud[i].ball;
}
 
void sort(student *stud, int n)
{
    student swap; 
    for(int i = 0; i < n; i++)
      for(int j = i + 1; j < n; j++)
        if (strcmp (stud[i].fam, stud[j].fam) > 0)
        {
            swap = stud[i];
            stud[i] = stud[j];
            stud[j] = swap;
        }
 }
 
void out(student *stud, int n)
{
        for(int i = 0; i < n; i++)
        { 
            cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
            cout << endl;
        }
        cout << endl;
}
 
 void poisk(student *stud, int n)
{
    sort(stud, n);
    
    for(int i = 0; i < n; i++)
    {
        if (strcmp(stud[i].fam, stud[i + 1].fam) == 0)
        {
                for ( int j = i;  j < n && strcmp(stud[i].fam, stud[j].fam) == 0; j++)
                {
                    cout << stud[j].fam << '\t' << stud[j].vozrast << '\t' <<  stud[j].gruppa << '\t' << stud[j].ball;
                    cout << endl;
                }
                break;
        }
    }
    cout << endl;
}
 
void poisk1(student *stud, int n)
{
    cout << "Enter surname" << endl;
    char fama[20];
    cin >> fama;
    cout << endl;
    for(int i = 0; i < n; i++)
        if (strcmp(fama, stud[i].fam) == 0)
        {
            cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
            cout << endl;
        }
    cout << endl;
}
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int key = 0, n = 8;
 
student *stud = new student[n];
 
do
{
    cout << "1.Students\n2.Surname\n3.Search\n0.Exit\n";
    cin >> key;
    cin.ignore(1);
    switch(key)
    {
    case 1:
        cout << endl << "Surname\tAge\tGroup\tBall" << endl << endl;
        read(stud, n);
        sort(stud, n);
        out(stud, n);
        break;
    case 2:
        read(stud, n);
        poisk(stud, n);
        break;
    case 3:
        read(stud, n);
        poisk1(stud, n);
        break;
    case 0:
        break;
       
    }
 
} while(key != 0);
 
system("pause");
return 0;
}


Добавлено через 30 минут
Или так:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
 
using namespace std;
 
struct student
{
    char fam[20];
    int vozrast;
    char gruppa[5];
    double ball;
};
 
student* read(int &n)
{
    ifstream in("file.txt");  
    if(!in)
    { 
        cout << "File can not be open\n";
        return 0;
    }
    else
    {
        for (n = 0;  ; n++)
        {
            string str;
            getline(in, str);
            if (in.eof()) break;
        }
        
        student *stud = new student[n]; // n - количество структур в файле
        
        in.clear();
        in.seekg(0);    
 
        for(int i = 0; i < n; i++)
            in >> stud[i].fam >> stud[i].vozrast >> stud[i].gruppa >> stud[i].ball;
            
        return stud;
    }
    
}
 
void sort(student *stud, int n)
{
    student swap; 
    for(int i = 0; i < n; i++)
      for(int j = i + 1; j < n; j++)
        if (strcmp (stud[i].fam, stud[j].fam) > 0)
        {
            swap = stud[i];
            stud[i] = stud[j];
            stud[j] = swap;
        }
 }
 
void out(student *stud, int n)
{
        for(int i = 0; i < n; i++)
        { 
            cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
            cout << endl;
        }
        cout << endl;
}
 
 void poisk(student *stud, int n)
{
    for(int i = 0; i < n; i++)
    {
        if (strcmp(stud[i].fam, stud[i + 1].fam) == 0)
        {
                for ( int j = i;  j < n && strcmp(stud[i].fam, stud[j].fam) == 0; j++)
                {
                    cout << stud[j].fam << '\t' << stud[j].vozrast << '\t' <<  stud[j].gruppa << '\t' << stud[j].ball;
                    cout << endl;
                }
                break;
        }
    }
    cout << endl;
}
 
void poisk1(student *stud, int n)
{
    cout << "Enter surname" << endl;
    char fama[20];
    cin >> fama;
    cout << endl;
    for(int i = 0; i < n; i++)
        if (strcmp(fama, stud[i].fam) == 0)
        {
            cout << stud[i].fam << '\t' << stud[i].vozrast << '\t' <<  stud[i].gruppa << '\t' << stud[i].ball; 
            cout << endl;
        }
    cout << endl;
}
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 int n;
 
 student *stud = read(n);
 
 if (stud)
 {
    sort(stud, n);
    
    int key = 0; 
    do
    {
        cout << "1.Students\n2.Surname\n3.Search\n0.Exit\n";
        
        cin >> key;
        switch(key)
        {
        case 1:
            cout << endl << "Surname\tAge\tGroup\tBall" << endl << endl;
            out(stud, n);
            break;
        case 2:
            poisk(stud, n);
            break;
        case 3:
            poisk1(stud, n);
            break;
        case 0:
            break;
        }
    } while (key != 0);
 
    delete [] stud;
 }
 
 system("pause");
 return 0;
}
Yandex
Объявления
06.03.2013, 07:22     Сравнение строк в структуре, чтение из файла
Ответ Создать тему
Опции темы

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