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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Psychko
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 14
11.01.2012, 18:38     ввод из файла структуры..исправьте... #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
#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

ткните пальцем где...и что не так...а то чтото совесем не могу понять ((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
john24
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 14
11.01.2012, 19:11     ввод из файла структуры..исправьте... #2
Вместо <istream> необходимо использовать <fstream>
C++
1
#include <fstream>
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 неразрешенных внешних элементов
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
ввод из файла структуры..исправьте...  
-=ЮрА=-
Заблокирован
Автор 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;
}
Yandex
Объявления
11.01.2012, 21:15     ввод из файла структуры..исправьте...
Ответ Создать тему
Опции темы

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