1500 / 964 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
1

Передача поля структуры через функцию

16.04.2017, 21:50. Показов 4429. Ответов 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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int k;
 
struct record
    {
    string name;
    string surname;
    } A[25];
 
void ReadFile(const string& fname) //Здесь нужен второй аргумент (название поля структуры)
{
    ifstream fin(fname.c_str());
    k = 0;
    while (!fin.eof())
    {
    fin >> A[k].name; //Здесь передается не namе или surname, a второй аргумент функции...
    k++;              //Как этот аргумент объявить и можно ли его передать через оператор '.'?
    }                 //Его нужно будет вызвать в теле программы в функции ReadFile() 2 раза
    fin.close();
}
 
int main()
{
    //Пока только так работает
    ReadFile("name.txt"); //Считываем имена
    
    //Должно быть так: 
    
    //ReadFile("surname.txt", поле структуры surname);
    //ReadFile("name.txt", поле структуры name);
    
    //А здесь просто печатаем фамилии и имена:
    for (int i = 0; i < k; i++)
    {
        cout << A[i].surname << " " << A[i].name << endl;
    }
    system("pause");
    return 0;
}
Добавлено через 40 минут
Вообщем, сделал так и все работает:

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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int k;
 
struct record
    {
    string name;
    string surname;
    } A[25];
 
void ReadFile(const string& fname, int p)
{
    ifstream fin(fname.c_str());
    k = 0;
    while (!fin.eof())
    {
    if (p == 1) 
    {
    fin >> A[k].name; 
    k++;
    }
    if (p == 2) 
    {
    fin >> A[k].surname; 
    k++;
    }              
    }                
    fin.close();
}
 
int main()
{
 
    ReadFile("surname.txt", 1);
    ReadFile("name.txt", 2);
    for (int i = 0; i < k; i++)
    {
        cout << A[i].surname << " " << A[i].name << endl;
    }
    system("pause");
    return 0;
}
Добавлено через 56 секунд
P.S. Может кто-то более элегантный метод предложит Буду благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2017, 21:50
Ответы с готовыми решениями:

Неверная передача в поля структуры через функцию
Имеется структура, в которой хранится два массива: сортированный и нет, а так же побочные...

Передача значения из поля структуры в функцию
Здравствуйте, у меня возникла проблема - у меня есть структура: struct game { char...

Передача структуры в функцию
#include &lt;stdio.h&gt; struct Student { char Name; /* Фамилия студента */ int ...

Передача структуры в функцию
объясните, пожалуйста, что это за передача структуры в некоторые функции программы: void...

5
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
16.04.2017, 22:03 2
Почему не хранить всё в одном файле?
0
1500 / 964 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
16.04.2017, 22:08  [ТС] 3
Спасибо за ваше замечание. Задача была поставлена так: "Фамилии и имена 25 учеников записаны в двух различных таблицах. Напечатать фамилию и имя каждого ученика на отдельной строке". Конечно, можно было пробежаться по каждому файлу отдельно, но я хотел считать все в одной функции и так сформировался мой вопрос, а затем, решение выше.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.04.2017, 22:14 4
Лучший ответ Сообщение было отмечено Fixer_84 как решение

Решение

Цитата Сообщение от Fixer_84 Посмотреть сообщение
Может кто-то более элегантный метод предложит
Такой же элегантный: проверять имя файла (раз данные в разных файлах).

Добавлено через 2 минуты
Цитата Сообщение от Fixer_84 Посмотреть сообщение
C++
1
while (!fin.eof())
Попутно: конструкция, приводящая к потенциальным ошибкам. Лучше само чтение поместить в параметры while().
1
1500 / 964 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
21.04.2017, 20:32  [ТС] 5
Прошу прощения...Ошибся....

Добавлено через 3 минуты
Сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
void ReadInfo() //Функция чтения информации из файла
{
    ifstream fin("input.txt");
    string s;
    p = 0;
    while (fin >> A[p].dest >> A[p].trnum >> A[p].time)
    {
        p++;
    }
    fin.close();
}
Вы это имели ввиду?

Добавлено через 1 минуту
nd2, спасибо вам! Вы очень помогли. Я нашел ошибку в другой программе на эту же тему. Ваши советы бесценны!
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 21:50 6
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Вы это имели ввиду?
Да.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2017, 21:50
Помогаю со студенческими работами здесь

Передача структуры в функцию
Привет, всем! Помогите чайнику как корректно передать структуру в качестве аргумента в функцию,...

Передача структуры в функцию
Пишу программу по структурам... Хочу передать в функцию объекты структуры, т.е. zakaz и параметр...

Передача структуры в функцию
Хочу передать массив в функцию. как лучше это сделать? struct a1{ char smA1; }; char b1 =...

Передача структуры в функцию
Здравствуйте. Как передать структуру в функцию? void Ekzamen(struct array, int n, int size) {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru