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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Psychko
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 14
#1

ввод из файла структуры..исправьте... - C++

11.01.2012, 18:38. Просмотров 1702. Ответов 4
Метки нет (Все метки)

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
#include <iomanip>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <istream>
using namespace std;
#define FNAME "1gr.txt"
#define INNAME "2gr.txt"
const int k=4;
const int p=3;
void main()
{int i;
 
struct doxodi
{
char shifr[80];
int p1;
int p2;
}
h[k],t[p];
fstream F1(FNAME,ios::in);
if(F1==0){cout<<"file ne otkrit="<<FNAME;
_getch();
return;
}
cout << "predpr 1-oi gryppi i ix doxodi" << endl;
for(i=0; i<k; i++)
{    
        
        F1 >> h[i].shifr;
        F1 >> h[i].p1;
}
F1.close();
fstream C(INNAME,ios::in);
if(C==0){cout<<"file ne otkrit="<<INNAME;
_getch();
return;
}
cout << "predpr 2-oi gryppi i ix doxodi" << endl;
for(i = 0; i < p; i++)
{               
 
        C >> t[i].shifr;
        C >> t[i].p2;
}
C.close();
for (i = 0; i < k; i++)
     for(int j = 0; j < p; j++)
         if(h[i].p1 == t[j].p2)
     cout << "y firmi " << setw(10) << h[i].shifr <<"   i firmi      "<< t[j].shifr << "    doxod" << setw(10) << h[i].p1 <<endl;
_getch();
return;
}

error C2079: "F1" использует неопределенный class "std::basic_fstream<_Elem,_Traits>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>: слишком много инициализаторов
1> error C2297: >>: недопустимо, правый оператор имеет тип "char [80]"
1>warning C4552: >>: оператор не имеет результата; требуется оператор с побочным действием
1> warning C4552: >>: оператор не имеет результата; требуется оператор с побочным действием
1> error C2228: выражение слева от ".close" должно представлять класс, структуру или объединение
1> тип: int
1> error C2079: "C" использует неопределенный class "std::basic_fstream<_Elem,_Traits>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>error C2078: слишком много инициализаторов
1>error C2297: >>: недопустимо, правый оператор имеет тип "char [80]"
1>оператор не имеет результата; требуется оператор с побочным действием
1>warning C4552: >>: оператор не имеет результата; требуется оператор с побочным действием
1> error C2228: выражение слева от ".close" должно представлять класс, структуру или объединение
1> тип: int

ткните пальцем где...и что не так...а то чтото совесем не могу понять ((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 18:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ввод из файла структуры..исправьте... (C++):

Структуры. Как сделать ввод из файла?) - C++
Помогите пожалуйста, как сделать, чтобы программа считывала фамилии сотрудников, инициалы, должность и год рождения из файла? :) #include...

Ввод структуры в текстовый файл столбиком и вывод данных из файла в структуру - C++
Имеется база данных в виде структуры, которая будет постепенно дописываться приблизительно до 1000 элементов. В каждом элементе структуры...

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод) - C++
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в файле. Также не помешала бы помощь в...

Структуры. исправьте пожалуйста... - C++
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • день рождения (массив из трех чисел)....

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла? - C++
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;, &quot;w&quot;); в переменной f содержится...

Структуры(ввод...) - C++
есть программа обрабатывающая список студентов, группы и оценки... собственно нужно чтобы программа запрашивала сколько будет...

4
john24
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 14
11.01.2012, 19:11 #2
Вместо <istream> необходимо использовать <fstream>
C++
1
#include <fstream>
0
Psychko
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 14
11.01.2012, 19:13  [ТС] #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
#include <iomanip>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <istream>
#include <fstream>
using namespace std;
#define FNAME "1gr.txt"
#define INNAME "2gr.txt"
const int k=4;
const int p=3;
void main()
{int i;
 
struct doxodi
{
char shifr[80];
int p1;
int p2;
}
h[k],t[p];
fstream F1(FNAME,ios::in);
if(F1==0){cout<<"file ne otkrit="<<FNAME;
_getch();
return;
}
cout << "predpr 1-oi gryppi i ix doxodi" << endl;
for(i=0; i<k; i++)
{    
        
        F1 >> h[i].shifr;
        F1 >> h[i].p1;
}
F1.close();
fstream C(INNAME,ios::in);
if(C==0){cout<<"file ne otkrit="<<INNAME;
_getch();
return;
}
cout << "predpr 2-oi gryppi i ix doxodi" << endl;
for(i = 0; i < p; i++)
{               
 
        C >> t[i].shifr;
        C >> t[i].p2;
}
C.close();
for (i = 0; i < k; i++)
     for(int j = 0; j < p; j++)
         if(h[i].p1 == t[j].p2)
     cout << "y firmi " << setw(10) << h[i].shifr <<"   i firmi      "<< t[j].shifr << "    doxod" << setw(10) << h[i].p1 <<endl;
_getch();
return;
}

теперь ошибка

1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
1>fatal error LNK1120: 1 неразрешенных внешних элементов
0
-=ЮрА=-
Заблокирован
Автор FAQ
11.01.2012, 21:00 #4
Psychko, я хотел подправить ваш код но передумал и написал с нуля вам костяк БД на плюсах, вам только немножко доработать...
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
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct doxodi
{
    char shifr[80];
    int  p1;
    int  p2;
};
 
bool bInitBase(char * szPath);
bool bWriteStruct(ofstream ofs, doxodi pst);
bool bReadStruct(ifstream &ifs, doxodi &pst);
 
int main()
{
    char sDBName[] = "data.txt";
    doxodi pst = {0};
    ifstream ifs;
    ofstream ofs;
    bool bContinue = bInitBase(sDBName);
    while(bContinue)
    {
        system("cls");
        cout<<"\t***MENU***\n";
        cout<<"1 - Add(Write) struct in file\n";
        cout<<"2 - Read struct from file\n";
        cout<<"Any other key - exit from program\n";
        switch(_getch())
        {
        case '1':
            cout<<"\tAdd(Write) struct in file\n";
            ofs.open(sDBName,ios::in|ios::out|ios::app);
            if(!ofs)
                cout<<"Error open : "<<sDBName<<endl;
            else
            {
                cout<<"shifr : ";cin.getline(pst.shifr,80);
                cout<<"p1    : ";cin>>pst.p1;
                cout<<"p2    : ";cin>>pst.p2;
                if(!bWriteStruct(ofs, pst))
                    cout<<"Error writing struct in data.txt\n";
                else
                    cout<<"Struct added\n";
                ofs.clear();
                ofs.close();
            }
            break;
        case '2':
            cout<<"\tRead struct from file\n";
            ifs.open(sDBName,ios::in|ios::out);
            if(!ifs)
                cout<<"Error open : "<<sDBName<<endl;
            else
            {
                ifs.seekg(0,ios::beg);
                while(!ifs.eof() && !ifs.bad())
                {
                    if(!bReadStruct(ifs, pst))
                        cout<<"Error read struct in : "<<sDBName<<endl;
                    else
                    {
                        cout<<"shifr : "<<pst.shifr<<endl;
                        cout<<"p1    : "<<pst.p1<<endl;
                        cout<<"p2    : "<<pst.p2<<endl;
                    }
                }
                ifs.clear();
                ifs.close();
            }
            break;
        default:
            cout<<"You choose exit from program\n";
            break;
        }
        system("pause");
    }
    return 0;
}
 
bool bInitBase(char * szPath)
{
    bool isInit = false;
    ofstream ofs;
    ifstream ifs(szPath);
    if(!ifs)
        ofs.open(szPath);
    else
    {
        isInit = true;
        ifs.close();
    }
    if(!ofs)
        cout<<"Error creation data.txt maby you run program from CD\n";
    else
    {
        isInit = true;
        ofs.close();
    }
    return isInit;
}
 
bool bWriteStruct(ofstream ofs, doxodi pst)
{
    bool isWrite = false;
    if(ofs)
    {
        if(!cin.fail())
        {
            ofs.seekp(0,ios::end);
            ofs<<pst.shifr<<endl;
            ofs<<pst.p1<<endl;
            ofs<<pst.p2<<endl;
            if(ofs.good())
                isWrite = true;
        }
    }
    return isWrite;
}
 
bool bReadStruct(ifstream &ifs, doxodi &pst)
{
    bool isRead = false;
    ifs.clear();
    if(ifs)
    {
        ifs.getline(pst.shifr,80);
        ifs>>pst.p1;
        ifs>>pst.p2;
        if(!ifs.bad() && !ifs.eof())
            isRead = true;  
    }
    return isRead;
}
1
Миниатюры
ввод из файла структуры..исправьте...  
-=ЮрА=-
Заблокирован
Автор FAQ
11.01.2012, 21:15 #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bool bInitBase(char * szPath);
- проверит есть ли БД с путём(именем) szPath, если таковойй нет то попробует её создать, если уж и создать текстовик не выйдет, то известит об этом, мол БД вы организовать не можете(ну например запустили экзешник записанный на CD ясное дело текстовый файл на CD вы с помощью fstreаm-а вы не создадите. Также вы можете пытаться создавать файл на забитом до краёв HDD или flash и т.д. тогда тоже будет облом. Данные варианты крайне маловероятны, но всё же)


Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bool bWriteStruct(ofstream ofs, doxodi pst);
- пишет поля структуры doxodi в файловый поток ofs

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bool bReadStruct(ifstream &ifs, doxodi &pst);
- читает поля структуры doxodi из файлового потока ifs

Добавлено через 6 минут
PS:Возможно этому причиной явились
Цитата Сообщение от Psychko Посмотреть сообщение
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
1 Некорректный для плюсов тип main
Цитата Сообщение от Psychko Посмотреть сообщение
void main()
2 Вы создали проект WIN32Application вместо Console Aplication

Добавлено через 3 минуты
Цитата Сообщение от Psychko Посмотреть сообщение
теперь ошибка
- вот компилирующийся ваш код
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <conio.h>
using namespace std;
 
#define FNAME "1gr.txt"
#define INNAME "2gr.txt"
 
struct doxodi
{
char shifr[80];
int p1;
int p2;
};
 
const int k=4;
const int p=3;
 
int main()
{
    int i,j;
 
    doxodi h[k],t[p];
    fstream F1(FNAME,ios::in);
    if(!F1)
    {
        cout<<"file ne otkrit="<<FNAME;
        _getch();
        return 1;
    }
    cout << "predpr 1-oi gryppi i ix doxodi" << endl;
    for(i=0; i<k; i++)
    {    
        
            F1 >> h[i].shifr;
            F1 >> h[i].p1;
    }
    F1.close();
    fstream C(INNAME,ios::in);
    if(!C)
    {
        cout<<"file ne otkrit="<<INNAME;
        _getch();
        return 1;
    }
    cout << "predpr 2-oi gryppi i ix doxodi" << endl;
    for(i = 0; i < p; i++)
    {               
 
            C >> t[i].shifr;
            C >> t[i].p2;
    }
    C.close();
    for (i = 0; i < k; i++)
    for(j = 0; j < p; j++)
        if(h[i].p1 == t[j].p2)
         cout << "y firmi " << setw(10) << h[i].shifr 
            <<"   i firmi      "<< t[j].shifr 
            << "    doxod" << setw(10) << h[i].p1 <<endl;
    _getch();
    return 0;
}
1
11.01.2012, 21:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 21:15
Привет! Вот еще темы с ответами:

Ввод в начало структуры - C++
Помогите :( У меня заданна структура с 3 элементами (заполненные), мне нужно ввести новый элемент в начало массива структур. Я не могу...

Структуры и ввод данных - C++
const int len_name=20; //длинна ФИО const int b=8; struct NOTE{ char name; //ФИО int phone; //номер телефона char...

Структуры. Ввод значения поля - C++
Проблема: при заполнении полей пишет переменная не инициализирована. Т.е. если я в коде инициализирую, то считает. А когда делаешь запрос...

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


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

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

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