0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
1

Считывание элементов структуры из файла

05.10.2016, 13:50. Показов 3312. Ответов 23
Метки нет (Все метки)

Задача: Используя структуру с полями пол , ФИО , возраст распечатать количество девушек по имени “ Елена “ и имена тех , кому 19 лет . ( Данные находятся в файле . )

Что я сделал: Я создал файл input.txt в директории самого проекта. в нем находятся 10 строк, элементы которых удовлетворяют типам структуры. Далее я пытаюсь открыть файл и записать с помощью цикла содержимое строк в соответствующие элементы структуры.

Проблема: не открывается файл на чтение и в итоге в структуру записывается какая-то абра-кадабра.

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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
struct Human
{
    bool Male;  // 1 - man 0 - woman
    char Name[15];
    int Age;
 
};
 
 
void output (Human object,int i)
{
Human obj[10];
        cout<<"Male: "<<obj[i].Male<<"  "<<"Name: "<<obj[i].Name<<" "<<"Age: "<<obj[i].Age;
}
 
void main ()
{
Human obj[10];
ifstream fin("input.txt");
for (int i=0;i<10;i++)
    {
        fin>>obj[i].Male;
        fin>>obj[i].Name;
        fin>>obj[i].Age;
    }
 
for (int i=0;i<10;i++)
    {
        output(obj[i],i);
    }
system ("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2016, 13:50
Ответы с готовыми решениями:

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

Считывание структуры из файла
Имеется файл с данными о товаре и прочей всячиной, нужно считать из файла в структуру. Помогите...

Считывание структуры данных с файла
Здравствуйте. Помогите, пожалуйста, вот с такими вопросами: 1) в файле записана определенная...

Считывание структуры из бинарного файла
Привет всем, при считывании структуры одной строкой кода и последующим выводом ее на экран...

23
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
05.10.2016, 13:54 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// print the content of a text file.
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
 
int main () {
  std::ifstream ifs;
 
  ifs.open ("test.txt", std::ifstream::in);
 
  ,,,,,
 
  ifs.close();
 
  return 0;
}
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 13:55 3
Цитата Сообщение от Peshkov Посмотреть сообщение
не открывается файл на чтение и в итоге в структуру записывается какая-то абра-кадабра.
Сделай в коде проверку на открытие файла для чтения. Откуда видишь что не открывается7
1
7 / 7 / 13
Регистрация: 04.10.2016
Сообщений: 52
05.10.2016, 13:55 4
а содержимое файла можно посмотреть?
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 13:58  [ТС] 5
Содержимое файла:

1 Vova 23
0 Elena 22
0 Natasha 19
1 Viktor 19
1 Zhenya 22
0 Masha 15
1 Alexey 18
1 Kolya 19
0 Ksenya 20
0 Sveta 25
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 13:59 6
Что-то одно: или массив выводишь, или один объект.
C++
1
2
3
4
5
void output (Human obj)
{
 
        cout<<"Male: "<<obj.Male<<"  "<<"Name: "<<obj.Name<<" "<<"Age: "<<obj.Age;
}
C++
1
2
3
4
    for (int i=0;i<10;i++)
    {
        output(obj[i]);
    }
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 14:06  [ТС] 7
Цитата Сообщение от nd2 Посмотреть сообщение
Что-то одно: или массив выводишь, или один объект.
C++
1
2
3
4
5
void output (Human obj)
{
 
        cout<<"Male: "<<obj.Male<<"  "<<"Name: "<<obj.Name<<" "<<"Age: "<<obj.Age;
}
C++
1
2
3
4
    for (int i=0;i<10;i++)
    {
        output(obj[i]);
    }
в 1м отрывке кода я пытался передавать в функцию i-ый объект для его вывведения
во 2м отрывке я выводил циклом весь массив объектов , вызывая функцию выведения каждого конкретного объекта
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 14:16 8
Цитата Сообщение от Peshkov Посмотреть сообщение
в 1м отрывке кода я пытался передавать в функцию i-ый объект для его вывведения
Передавал одно, а выводил элемент локального (и пустого) массива, создаваемого в самой функции вывода.
1
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
05.10.2016, 14:20 9
Peshkov, при отладке в студии текущий каталог какой? может полый путь указать?
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 14:22  [ТС] 10
Цитата Сообщение от nd2 Посмотреть сообщение
Сделай в коде проверку на открытие файла для чтения. Откуда видишь что не открывается7
сделал проверку на открытие файла. он не открывается.

Добавлено через 19 секунд
Цитата Сообщение от ture Посмотреть сообщение
Peshkov, при отладке в студии текущий каталог какой? может полый путь указать?
сейчас попробую
0
7 / 7 / 13
Регистрация: 04.10.2016
Сообщений: 52
05.10.2016, 14:23 11
Рабочий проверенный вариант, запускай через екзешник который находится в той же директории что и текстовый файл, если запускаешь с отладкой через среду разработки, то пиши абсолютный путь например:

C++
1
fin.open("C:\\Users\\User\\Documents\\Visual Studio 2015\\Projects\\CyberForum\\Debug\\input.txt", std::ios::in);
тут путь относительный:

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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
struct Human
{
    bool Male;
    char Name[15];
    int Age;
};
 
void output(Human obj)
{
    cout << "Male: " << obj.Male << "  " << "Name: " << obj.Name << " " << "Age: " << obj.Age << "\n";
}
 
void main(){
    
    Human obj[10]{};
    ifstream fin;
    fin.open(".\\input.txt", std::ios::in);
    for (int i = 0; i < 10; i++)
    {
        fin >> obj[i].Male;
        fin >> obj[i].Name;
        fin >> obj[i].Age;
 
        output(obj[i]);
    }
    system("pause");
}
п. с. Вариант рабочий
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 14:24  [ТС] 12
Цитата Сообщение от nd2 Посмотреть сообщение
Передавал одно, а выводил элемент локального (и пустого) массива, создаваемого в самой функции вывода.
тогда как правильно это сделать? объясните, пожалуйста.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 14:28 13
Цитата Сообщение от Peshkov Посмотреть сообщение
тогда как правильно это сделать? объясните, пожалуйста.
Я же показал как. И проверку на открытие файла сделай.

Добавлено через 58 секунд
Volchonok34 вот показал.

Добавлено через 53 секунды
Цитата Сообщение от Peshkov Посмотреть сообщение
сделал проверку на открытие файла. он не открывается.
Цитата Сообщение от Peshkov Посмотреть сообщение
Я создал файл input.txt в директории самого проекта.
Расширения файлов в ОС видны?
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 14:31  [ТС] 14
да, видны
0
7 / 7 / 13
Регистрация: 04.10.2016
Сообщений: 52
05.10.2016, 14:33 15
мой пост смотри Считывание элементов структуры из файла,
а проверка на открытие файла выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
ifstream fin;
    fin.open(".\\input.txt", std::ios::in);
    if (!fin.is_open())
    {
        // не открыл
    }
    else
    {
        // открыл
    }
и путь в винде нужно указывать через двойной обратный слэш \\
0
0 / 0 / 0
Регистрация: 26.12.2015
Сообщений: 9
05.10.2016, 14:35  [ТС] 16
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
struct Human
{
    bool Male;  // 1 - man 0 - woman
    char Name[15];
    int Age;
 
};
 
 
void output (Human obj)
{
        cout<<"Male: "<<obj.Male<<"  "<<"Name: "<<obj.Name<<" "<<"Age: "<<obj.Age;
}
 
void main ()
{
    Human obj[10];
ifstream fin;
fin.open("C:\\Users\\USER\\Documents\\Visual Studio 2010\\Projects\\lab5zad4\\Debug\\input.txt", std::ios::in);
if (!fin.is_open())
    cout<<"can't open the file"<<endl;
else
{
    for (int i=0;i<10;i++)
        {
            fin>>obj[i].Male;
            fin>>obj[i].Name;
            fin>>obj[i].Age;
            output(obj[i]);
    }
}
system ("pause");
}
отказывается открывать по-прежнему
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 14:37 17
Цитата Сообщение от Peshkov Посмотреть сообщение
отказывается открывать по-прежнему
Обратные слеши двойными сделай.
0
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
05.10.2016, 14:37 18
C++
1
R"(C:\Users\USER\Documents\Visual Studio 2010\Projects\lab5zad4\Debug\input.txt)"
0
7 / 7 / 13
Регистрация: 04.10.2016
Сообщений: 52
05.10.2016, 14:37 19
дык путь не "C:\Users\USER\Documents\Visual Studio 2010\Projects\lab5zad4\Debug\\input.txt"
а "C:\\Users\\USER\\Documents\\Visual Studio 2010\\Projects\\lab5zad4\\Debug\\input.txt"
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.10.2016, 14:38 20
Цитата Сообщение от Peshkov Посмотреть сообщение
Я создал файл input.txt в директории самого проекта
Цитата Сообщение от Peshkov Посмотреть сообщение
Цитата Сообщение от Peshkov Посмотреть сообщение
\lab5zad4\Debug\\input.txt"
Debug - это не папка проекта. Папка проекта - это где файл с main() лежит.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2016, 14:38
Помогаю со студенческими работами здесь

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

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

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

Считывание элементов матрицы из файла и запись ответов в другой текстовый файл
Помогите пожалуйста написать программу для считывания элементов матрицы размером М х N из файла для...


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

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

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