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

Структуры.не считывается из файла - C++

Восстановить пароль Регистрация
 
Юлька1994
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 7
07.01.2014, 03:56     Структуры.не считывается из файла #1
Всем привет!
Ребят,тут такое дело,вобщем задали нам лабу написать.Нужно было написать программу,которая считывала бы из файла фамилию сотрудника и выводила бы его год рождения и оклад,программа то работает,но из файла не считывается,помогите разобраться,а то послезавтра сдавать уже
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
#include "stdafx.h"
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//#include <windows.h>
#include <iostream>
#include <clocale>
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
 
     const int l_name = 15, l_year = 5, l_pay = 4, 
 
      l_buf = l_name + l_year + l_pay;                  //  1
 
  
 
  struct Man {                                          //  2
 
    int birth_year; 
 
    char name[l_name + 1];
 
    float pay;
 
  };
 
  const int l_dbase = 100;
 
  Man dbase[l_dbase];                                   //  3
 
  
 
  char buf [l_buf + 1];                                 //  4
 
  char name[l_name + 1];                                //  5
 
  
 
  ifstream fin("dbase.txt", ios::in | ios::_Nocreate);  //  6
 
if (!fin) { cout << " Ошибка открытия файла "; return 1; }
 
  
 
  int i = 0;
 
  while (fin.getline(buf, l_buf)) {                     //  7
 
    if (i >= l_dbase) { cout << " Слишком длинный файл "; return 1; }
 
    strncpy(dbase[i].name, buf, l_name);
 
    dbase[i].name[l_name] = '\0';
 
    dbase[i].birth_year = atoi(&buf[l_name]);
 
    dbase[i].pay = atof(&buf[l_name + l_year]);
 
    i++;
 
  }
 
  int n_record = i, n_man = 0;                          //  8
 
  float mean_pay = 0;
 
while (true) { 
// 9
cout << " Введите фамилию или слово end: "; cin >> name;
// OemToChar(name, name); // 10
if (strcmp(name, "end") == 0 )break; // 11
bool not_found = true; // 12
for (i = 0; i < n_record; i++) { // 13
if (strstr(dbase[i].name, name)) // 14
if (dbase[i].name[strlen(name)] == ' ') { // 15
strcpy(name, dbase[i].name);
// CharToOem(name, name); // 16
cout << name << dbase[i].birth_year << ' ' << dbase[i].pay
<< endl; 
n_man++; mean_pay += dbase[i].pay;
not_found = false;
}
}
if (not_found) cout << " Такого сотрудника нет" << endl;
}
if (n_man > 0) cout << " Средний оклад: " << mean_pay / n_man <<
endl; // 17
return 0;
}
Файл dbase.txt должен лежать в папке проекта
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 03:56     Структуры.не считывается из файла
Посмотрите здесь:

C++ Чтение структуры из файла
C++ Неправильно считывается структура из файла
чтение структуры из файла C++
Структуры из файла C++
Формирование структуры из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.01.2014, 06:55     Структуры.не считывается из файла #2
Цитата Сообщение от Юлька1994 Посмотреть сообщение
Файл dbase.txt должен лежать в папке проекта
Галавное не написали: как данные в файле располагаются?
1) Структура в одной строке (поля через пробел)? Очерёдность полей с строке?
1) Структура в трёх строках (каждое поле - строка)? Очерёдность полей?
Юлька1994
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 7
08.01.2014, 00:14  [ТС]     Структуры.не считывается из файла #3
каждая строка dbase.txt содержит фамилию сотрудника,дату рождения и оклад,поиск осуществляется по фамилии,т.е.: иванов 1994 9999
при вводе фамилии иванов из строки должна быть считана вся информация и выведена на экран
Длина строки формируется из трех параметров name,byrth_year,pay
проблема в том что программа работает,вот только почему то не находит в dbase.txt строки
Возможно я неправильно заполняю файл,но перепробовала много вариантов и не знаю в чем дело...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 02:35     Структуры.не считывается из файла #4
В файле:
Иванов 1994 9999
Сидоров 1995 10000
Петров 1994 8000
Кузнецов 1993 7000
Орлов 1995 11000
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
#include <fstream>
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <windows.h>
 
using namespace std;
 
int main()
{
    //setlocale(LC_ALL,"Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int l_name = 25; 
   
    struct Man 
    {                                       
        char name[l_name];
        int birth_year; 
        float pay;
    };
    
    ifstream fin("dbase.txt");
    if (!fin) { cout << " Ошибка открытия файла "; return 1; }
    
    do
    {
        cout << " Введите фамилию или слово end: "; 
        char name[l_name];
        (cin >> name).get();
        if (strcmp(name, "end") == 0 ) break; 
    
        bool not_found = true;
        Man temp;
        while (fin >> temp.name) 
        {                    
            fin >> temp.birth_year >> temp.pay;
            if (strcmp(temp.name, name) == 0)
            {
                not_found = false;
                cout << ' ' << temp.name << ' ' << temp.birth_year 
                     << ' ' << temp.pay  << endl;
            }
        }
        fin.clear();
        fin.seekg(0);
        if (not_found) cout << " Такого сотрудника нет" << endl;
   
    } while (true);
    
    cout << "Для выхода нажмите любую клавишу";
    cin.get();
    return 0;
}
Юлька1994
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 7
08.01.2014, 03:44  [ТС]     Структуры.не считывается из файла #5
Спасибо вам огромное(+1),
А вот еще такой вопрос,а можно как то сделать что бы поиск шел по дате рождения?..просто самой интересно,попыталась изменить код,но почему то ошибки,подскажите как сделать если не сложно?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.01.2014, 03:53     Структуры.не считывается из файла #6
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
do
    {
        cout << " Введите год рождения или 0 для выхода: "; 
        int year;
        (cin >> year).get();
        if (year == 0 ) break; 
    
        bool not_found = true;
        Man temp;
        while (fin >> temp.name) 
        {                    
            fin >> temp.birth_year >> temp.pay;
            if (temp.birth_year == year)
            {
                not_found = false;
                cout << ' ' << temp.name << ' ' << temp.birth_year 
                     << ' ' << temp.pay  << endl;
            }
        }
        fin.clear();
        fin.seekg(0);
        if (not_found) cout << " Такого сотрудника нет" << endl;
   
    } while (true);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 04:10     Структуры.не считывается из файла
Еще ссылки по теме:

C++ Долго считывается информация с файла
C++ Заполнение структуры из файла
Не считывается строка из файла C++

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

Или воспользуйтесь поиском по форуму:
Юлька1994
0 / 0 / 0
Регистрация: 07.01.2014
Сообщений: 7
08.01.2014, 04:10  [ТС]     Структуры.не считывается из файла #7
Спасибо вам!
Буду вникать дальше)
Yandex
Объявления
08.01.2014, 04:10     Структуры.не считывается из файла
Ответ Создать тему
Опции темы

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