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

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

Войти
Регистрация
Восстановить пароль
 
Noirman
0 / 0 / 0
Регистрация: 03.03.2009
Сообщений: 31
#1

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

05.03.2013, 16:18. Просмотров 1110. Ответов 2
Метки нет (Все метки)

Требуется написать программу, которая считывает из файла данные о студентах, сортирует их по фамилии и выводит их на экран. Далее нужно найти однофамильцев в группе и вывести данные о них на экран. Проблемы, собственно, две:
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);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 16:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение строк в структуре, чтение из файла (C++):

Сравнение строк в структуре - C++
Помогите, пожалуйста. Задается структура &quot;Фильм&quot;: вводится название фильма, режиссер, год выпуска и стоимость. Это все сделано. Необходимо...

Сравнение строк в структуре - C++
смысл таков- я ввожу строку char nomerP, и эта строка должна сравниться с char NO и вернуть мне 0 или отличное от 0 значение. Вот вызов...

Cтроки, сравнение, чтение из файла - C++
Имеется файл .тхт с содержанием примерно следующего вида: 192.168.0.1 www.allposters.com 192.168.0.2 www.debian.org 192.168.0.3...

Сравнение переменных или чтение с файла? - C++
После тестировки, выяснилось, что проблема возникает в строке указаной коментом. Хочу узнать в чем заключается ошибка.Возможно проблема...

Чтение из файла в список, сравнение с элементами списка - C++
Здравствуйте! Стыдно спрашивать такие нюансы, но все же приходится, ибо в мою деревянную голову ничего просто так не входит. Подскажите...

Чтение и сравнение символов из файла без использования массива - C++
Здравствуйте, подскажите, как можно реализовать посимвольное чтение 2-х (3-х) файлов, при котором символ из 1-го файла сравнивается с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Noirman
0 / 0 / 0
Регистрация: 03.03.2009
Сообщений: 31
05.03.2013, 16:38  [ТС] #2
Файл, с которого программа считывает данные.
0
Вложения
Тип файла: txt file.txt (169 байт, 31 просмотров)
alsav22
5419 / 4815 / 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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2013, 07:22
Привет! Вот еще темы с ответами:

Чтение строк из файла - C++
Добрый день имеется ряд вопросов касательно чтения строк из текстового файла. В папке с программой содержится файл TEST.TXT, в котором...

Чтение строк из файла - C++
struct Questions { char quest; }QuestList; void main() { int numQuest=0; FILE *fp; fp = fopen(&quot;voprosy.txt&quot;,...

Чтение строк из файла - C++
Есть файл с 10 строками, необходимо вывести на экран четные строки ifstream file(&quot;C:\\1.txt&quot;); for (int i = 0; i &lt; 5; i++) { ...

Чтение строк из файла - C++
Мне нужно читать строки из фалйа разной длинны тоесть может быть вобще пустая строка. нужно именно c++ не c


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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