Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
murinikitti
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 3
1

Считать строки из файла, найти строки на определённую букву

04.01.2016, 12:08. Просмотров 355. Ответов 4

По заданию нужно вывести данные студентов, чьи фамилии начинаются на А и математику сдали на 8 или 9. Проблема в поиске фамилии на А, сначала показывает, что стек переполнен, потом - http://www.cyberforum.ru/attachment....1&d=1451898432
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
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int ST_NUMB=17000; 
struct Students 
{
    char second_name [100];
    int year_of_birth; 
    int group_number;
    int physics_point;
    int maths_point;
    int comp_science_point;
    int chemistry_point;    
};
void CreateFile(Students *, int, double, string &);
void ShowFile(Students *,  double, string, int);
void AddToFile(Students *, int, double, string &);
void Personal(Students *, string, double, int);
void main()
{
    setlocale (LC_ALL, "RUS");  Students arr_of_students[ST_NUMB];  
    double gpa=0;
    int menu, m=0;  
    string filename;
    cout<<"Выберите действие"<<endl<<"Для создания нового файла нажмите 1"<<endl<<"Для открытия уже существующего файла нажмите 2"<<endl
        <<"Для добавления записи (записей) к существующему файлу нажмите 3"<<endl; 
    cin>>menu;
    switch (menu) 
                {
                case 1: CreateFile(arr_of_students, ST_NUMB, gpa,  filename); 
                    break; 
                case 2: ShowFile(arr_of_students, gpa, filename, m);  
                    break;
                case 3: AddToFile(arr_of_students, ST_NUMB, gpa,  filename);
                    break;
                case 4:  Personal(arr_of_students, filename, gpa, m); 
                    break;
system ("pause");
} 
void Personal(Students *arr_of_students, string filename, double gpa, int m)
{
        char a='A';
    char temp[100]; 
    ifstream fin(filename, ios::in);
    if(!fin.is_open())
    {
     cout<<"Файл не может быть открыт"<<endl;
    }
    else 
    {
    while (!fin.eof())
    { 
        fin>>arr_of_students[m].second_name>>arr_of_students[m].year_of_birth>>
            arr_of_students[m].group_number>>arr_of_students[m].physics_point>>arr_of_students[m].maths_point
            >>arr_of_students[m].comp_science_point>>arr_of_students[m].chemistry_point>>gpa;
        strncpy(temp, arr_of_students[m].second_name, 1);
    if (temp==&a && arr_of_students[m].maths_point==8 || temp==&a && arr_of_students[m].maths_point==9)
        {           
        cout<<arr_of_students[m].second_name<<" "<<arr_of_students[m].year_of_birth<<" "<<
            arr_of_students[m].group_number<<" "<<arr_of_students[m].physics_point<<" "<<arr_of_students[m].maths_point
            <<" "<<arr_of_students[m].comp_science_point<<" "<<arr_of_students[m].chemistry_point<<" "<<gpa<<endl;
        }
    m++;
    } 
    }
    fin.close();
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Миниатюры
Считать строки из файла, найти строки на определённую букву  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2016, 12:08
Ответы с готовыми решениями:

Как считать строки из файла, если там больше одной строки?
Как считать строки из файла в массив. Если в файле одна строка, то нет проблем, но если несколько,...

Строки: считать текст из файла и вывести в другой файл и на экран только строки, не содержащие цифр
Написать программу, которая считывает текст из файла и выводит в другой файл и на экран только...

Найти все строки содержащие определённую подстроку
У меня есть массив строк из файла и мне его надо обработать. Мне надо найти все строки содержащие...

Как попроще считать определённую строку из файла и присвоить её содержимое string переменной?
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;windows.h&gt; using namespace std; int main() {...

Считать строки из файла в массив ++
Напишите программный код для считывания строк файла в элементы массива. Заранее спасибо!

4
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
04.01.2016, 12:48 2
Цитата Сообщение от murinikitti Посмотреть сообщение
void CreateFile(Students *, int, double, string &);
void ShowFile(Students *, *double, string, int);
void AddToFile(Students *, int, double, string &);
функции не реализованы, в этом фрагменте....

Добавлено через 1 минуту
Цитата Сообщение от murinikitti Посмотреть сообщение
ifstream fin(filename, ios::in);
filename - не инициализирован
1
murinikitti
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 3
04.01.2016, 14:04  [ТС] 3
Эти функции просто не копировала.
Ввожу сейчас с клавиатуры имя файла - та же ошибка.
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
04.01.2016, 14:38 4
Цитата Сообщение от murinikitti Посмотреть сообщение
Ввожу сейчас с клавиатуры имя файла - та же ошибка.
весь обновленный код.
0
murinikitti
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 3
04.01.2016, 14:44  [ТС] 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
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int ST_NUMB=17000; 
struct Students 
{
    char second_name [100];
    int year_of_birth; 
    int group_number;
    int physics_point;
    int maths_point;
    int comp_science_point;
    int chemistry_point;    
};
void CreateFile(Students *, int, double, string &);
void ShowFile(Students *,  double, string, int);
void AddToFile(Students *, int, double, string &);
void Personal(Students *, string, double, int);
void main()
{
    setlocale (LC_ALL, "RUS");  Students arr_of_students[ST_NUMB];  
    double gpa=0;
    int menu, m=0;  
    string filename;
    cout<<"Выберите действие"<<endl<<"Для создания нового файла нажмите 1"<<endl<<"Для открытия уже существующего файла нажмите 2"<<endl
        <<"Для добавления записи (записей) к существующему файлу нажмите 3"<<endl; 
    cin>>menu;
    switch (menu) 
                {
                case 1: CreateFile(arr_of_students, ST_NUMB, gpa,  filename); 
                    break; 
                case 2: ShowFile(arr_of_students, gpa, filename, m);  
                    break;
                case 3: AddToFile(arr_of_students, ST_NUMB, gpa,  filename);
                    break;
                case 4:  Personal(arr_of_students, filename, gpa, m); 
                    break;
system ("pause");
} 
void Personal(Students *arr_of_students, string filename, double gpa, int m)
{
 
        char a='A';
    char temp[100]; 
cin>>filename;
    ifstream fin(filename, ios::in);
    if(!fin.is_open())
    {
     cout<<"Файл не может быть открыт"<<endl;
    }
    else 
    {
    while (!fin.eof())
    { 
        fin>>arr_of_students[m].second_name>>arr_of_students[m].year_of_birth>>
            arr_of_students[m].group_number>>arr_of_students[m].physics_point>>arr_of_students[m].maths_point
            >>arr_of_students[m].comp_science_point>>arr_of_students[m].chemistry_point>>gpa;
        strncpy(temp, arr_of_students[m].second_name, 1);
    if (temp==&a && arr_of_students[m].maths_point==8 || temp==&a && arr_of_students[m].maths_point==9)
        {           
        cout<<arr_of_students[m].second_name<<" "<<arr_of_students[m].year_of_birth<<" "<<
            arr_of_students[m].group_number<<" "<<arr_of_students[m].physics_point<<" "<<arr_of_students[m].maths_point
            <<" "<<arr_of_students[m].comp_science_point<<" "<<arr_of_students[m].chemistry_point<<" "<<gpa<<endl;
        }
    m++;
    } 
    }
    fin.close();
}
А если сделать просто сортировку по полю оценки, то всё работает
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int ST_NUMB=17000; 
struct Students 
{
    string second_name;
    int year_of_birth; 
    int group_number;
    int physics_point;
    int maths_point;
    int comp_science_point;
    int chemistry_point;    
};
void CreateFile(Students *, int, double, string &);
void ShowFile(Students *,  double, string, int);
void AddToFile(Students *, int, double, string &);
void Personal(Students *, int, double, string &, int);
void main()
{
    setlocale (LC_ALL, "RUS");  Students arr_of_students[ST_NUMB];  
    double gpa=0;
    int menu, m=0;  
    string filename;
    cout<<"Выберите действие"<<endl<<"Для создания нового файла нажмите 1"<<endl<<"Для открытия уже существующего файла нажмите 2"<<endl
        <<"Для добавления записи (записей) к существующему файлу нажмите 3"<<endl; 
    cin>>menu;
    switch (menu) 
                {
                case 1: CreateFile(arr_of_students, ST_NUMB, gpa,  filename); 
                    break; 
                case 2: ShowFile(arr_of_students, gpa, filename, m);  
                    break;
                case 3: AddToFile(arr_of_students, ST_NUMB, gpa,  filename);
                    break;
                case 4: Personal(arr_of_students, ST_NUMB, gpa,  filename, m); 
                    break;
                /*case 5: ; 
                    break;
                case 6: ; 
                    break;
                case 7: ; 
                    break;
                case 8: ; 
                    break; */
                }
    system ("pause");
} 
void CreateFile(Students *arr_of_students, int ST_NUMB, double gpa, string &filename)
{
    cout<<"Введите путь к файлу"<<endl;
    cin>>filename;
    char stop;  
    cout<<"Фамилия "<<"Год рождения "<<"Номер группы "<<"Оценка по "<<"Оценка по  "<<"Оценка по "<<"Оценка по "<<endl;
    cout<<"                                    "<<"физике  "<<"математике "<<"информатике "<<"химии "<<endl;
    cout<<"Для ввода данных пользователя нажмите любую клавишу"<<endl<<"Для завершения ввода данных нажмите 1"<<endl;  
    ofstream fout(filename, ios::out);  
    for(int i=0; i<ST_NUMB; i++)
    {
        cin>>stop; 
        if (stop!='1')
        {
            cout<<"Введите данные пользователя"<<endl;
            cin>>arr_of_students[i].second_name>>arr_of_students[i].year_of_birth>>arr_of_students[i].group_number
            >>arr_of_students[i].physics_point>>arr_of_students[i].maths_point>>arr_of_students[i].comp_science_point>>
            arr_of_students[i].chemistry_point;  
 
            gpa=((double)arr_of_students[i].physics_point+(double)arr_of_students[i].maths_point+(double)
            arr_of_students[i].comp_science_point+(double)arr_of_students[i].chemistry_point)/4;
 
            fout<<arr_of_students[i].second_name<<" "<<arr_of_students[i].year_of_birth<<" "<<
            arr_of_students[i].group_number<<" "<<arr_of_students[i].physics_point<<" "<<arr_of_students[i].maths_point
            <<" "<<arr_of_students[i].comp_science_point<<" "<<arr_of_students[i].chemistry_point<<" "<<gpa;
        }     
        else break;
  }
  fout.close();  
} 
void ShowFile (Students *arr_of_students, double gpa, string filename, int m)
{ 
    cout<<"Введите путь к файлу"<<endl;
    cin>>filename;
    ifstream fin(filename, ios::in);
    if(!fin.is_open())
    {
     cout<<"Файл не может быть открыт"<<endl;
    }
    else
    {
    while (!fin.eof())
    {
        fin>>arr_of_students[m].second_name>>arr_of_students[m].year_of_birth>>
            arr_of_students[m].group_number>>arr_of_students[m].physics_point>>arr_of_students[m].maths_point
            >>arr_of_students[m].comp_science_point>>arr_of_students[m].chemistry_point>>gpa;
        cout<<arr_of_students[m].second_name<<" "<<arr_of_students[m].year_of_birth<<" "<<
            arr_of_students[m].group_number<<" "<<arr_of_students[m].physics_point<<" "<<arr_of_students[m].maths_point
            <<" "<<arr_of_students[m].comp_science_point<<" "<<arr_of_students[m].chemistry_point<<" "<<gpa<<endl;
        m++;
    } 
    }
    fin.close();
}
void AddToFile(Students *arr_of_students, int ST_NUMB, double gpa, string &filename)
{ 
    cout<<"Введите путь к файл, в который будут записываться данные"<<endl;
    cin>>filename;
    char stop;  
    cout<<"Фамилия "<<"Год рождения "<<"Номер группы "<<"Оценка по "<<"Оценка по  "<<"Оценка по "<<"Оценка по "<<endl;
    cout<<"                                    "<<"физике  "<<"математике "<<"информатике "<<"химии "<<endl;
    cout<<"Для ввода данных пользователя нажмите любую клавишу"<<endl<<"Для завершения ввода данных нажмите 1"<<endl;  
    ofstream fout(filename, ios::app);  
    for(int i=0; i<ST_NUMB; i++)
    {
        cin>>stop; 
        if (stop!='1')
        {
            cout<<"Введите данные пользователя"<<endl;
            cin>>arr_of_students[i].second_name>>arr_of_students[i].year_of_birth>>arr_of_students[i].group_number
            >>arr_of_students[i].physics_point>>arr_of_students[i].maths_point>>arr_of_students[i].comp_science_point>>
            arr_of_students[i].chemistry_point;  
            
            gpa=((double)arr_of_students[i].physics_point+(double)arr_of_students[i].maths_point+(double)
            arr_of_students[i].comp_science_point+(double)arr_of_students[i].chemistry_point)/4;
 
            fout<<arr_of_students[i].second_name<<" "<<arr_of_students[i].year_of_birth<<" "<<
            arr_of_students[i].group_number<<" "<<arr_of_students[i].physics_point<<" "<<arr_of_students[i].maths_point
            <<" "<<arr_of_students[i].comp_science_point<<" "<<arr_of_students[i].chemistry_point<<" "<<gpa;
        }     
        else break;
  }
  fout.close();  
}
void Personal (Students *arr_of_students, int ST_NUMB, double gpa, string &filename, int m) 
{
    cout<<"Введите путь к файлу"<<endl;
    cin>>filename;
    ifstream fin(filename, ios::in);
    if(!fin.is_open())
    {
     cout<<"Файл не может быть открыт"<<endl;
    }
    else
    {
    while (!fin.eof())
    {
        fin>>arr_of_students[m].second_name>>arr_of_students[m].year_of_birth>>
            arr_of_students[m].group_number>>arr_of_students[m].physics_point>>arr_of_students[m].maths_point
            >>arr_of_students[m].comp_science_point>>arr_of_students[m].chemistry_point>>gpa; 
 
        if (arr_of_students[m].maths_point==8 || arr_of_students[m].maths_point==9)
        {
 
           cout<<arr_of_students[m].second_name<<" "<<arr_of_students[m].year_of_birth<<" "<<
            arr_of_students[m].group_number<<" "<<arr_of_students[m].physics_point<<" "<<arr_of_students[m].maths_point
            <<" "<<arr_of_students[m].comp_science_point<<" "<<arr_of_students[m].chemistry_point<<" "<<gpa<<endl;
        }
 
        m++;
    } 
    }
    fin.close();
}
0
04.01.2016, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2016, 14:44

Найти и считать из файла все от известной строки до пустой
Здраствуйте! Пытаюсь реализовать в программе поиск данных по txt-файлу. Есть txt-файл с кучей...

Считать массив из файла и найти максимальные элементы каждой строки
Двухмерный целочисленный массив задан текстовым файлом stdin.txt. В каждой строке этого файла...

Считать определённую строку из файла
Привет! Подскажите, как считать\перезаписать ОПРЕДЕЛЁННУЮ стоку из текстового файла. Пожалуйста, не...


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

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

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