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

Мусор при правильном считывание данных из файла - C++

Восстановить пароль Регистрация
 
KostyaKulakov
Заблокирован
22.02.2013, 21:37     Мусор при правильном считывание данных из файла #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
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
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
 
class Database
{
public:
    Database(){count = 0;}
 
    void  addRecord(char* name, char* lastname);
    char* getNameById(int id);
    char* getLastNameById(int id);
    int   getCount();
    void  save();
    void  load();
    void  printDatabase();
 
protected:
    int count;
    char* name[100];
    char* lastname[100];
};
 
int Database::getCount()
{
    return count;
}
 
void Database::addRecord(char* name, char* lastname)
{
    this->name[count] = name;
    this->lastname[count] = lastname;
    ++count;
}
 
char* Database::getNameById(int id)
{
    return name[id];
}
 
char* Database::getLastNameById(int id)
{
    return lastname[id];
}
 
void  Database::save()
{
    std::ofstream output;
    output.open("database.txt");
 
    if(!output.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
    int count = getCount();
 
    for(int i=0; i < count; ++i)
        output << getNameById(i) << " " << getLastNameById(i) << std::endl;
 
    output.close();
 
}
 
void  Database::load()
{
    std::ifstream input;
    input.open("database.txt");
 
    if(!input.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
 
    while(!input.eof())
    {
        std::string name;
        input >> name;
        std::string lastname;
        input >> lastname;
 
        char name_[100];
        char lastname_[100];
 
        strcpy(name_,name.c_str());
        strcpy(lastname_,lastname.c_str());
 
        addRecord(name_,lastname_);
    }
 
    input.close();
 
}
 
void Database::printDatabase()
{
    int count = getCount();
 
    for(int i=0; i < count; ++i)
        std::cout << getNameById(i) << " " << getLastNameById(i) << std::endl;
}
 
int main()
{
    Database server;
    
    server.load();
 
    /*
    server.addRecord("Kostya","Kulakov");
    server.addRecord("Lusya","Begunova");
    server.addRecord("Vanya","Frolov");
    server.addRecord("Alex","Sensei");
    */
    server.printDatabase();
 
    //server.save();
 
    return 0;
}
database.txt

C++
1
2
3
4
Kostya Kulakov
Lusya Begunova
Vanya Frolov
Alex Sensei
при считывание из файла, заносится мусор, почему?

ф-ця Database::load()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 21:37     Мусор при правильном считывание данных из файла
Посмотрите здесь:

считывание данных из файла C++
Считывание данных из файла C++
считывание данных из файла C++
Считывание данных из файла C++
Считывание данных с файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 21:41     Мусор при правильном считывание данных из файла #2
Сделайте проверку на eof и выход из while() сразу после первого input >>.
KostyaKulakov
Заблокирован
22.02.2013, 21:45  [ТС]     Мусор при правильном считывание данных из файла #3
рабочий вариант, просто изменил char* На string.

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
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
 
class Database
{
public:
    Database(){count = 0;}
 
    void  addRecord(std::string name, std::string lastname);
    std::string getNameById(int id);
    std::string getLastNameById(int id);
    int   getCount();
    void  save();
    void  load();
    void  printDatabase();
 
protected:
    int count;
    std::string name[100];
    std::string lastname[100];
};
 
int Database::getCount()
{
    return count;
}
 
void Database::addRecord(std::string name, std::string lastname)
{
    this->name[count] = name;
    this->lastname[count] = lastname;
    ++count;
}
 
std::string Database::getNameById(int id)
{
    return name[id];
}
 
std::string Database::getLastNameById(int id)
{
    return lastname[id];
}
 
void  Database::save()
{
    std::ofstream output;
    output.open("database.txt");
 
    if(!output.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
    int count = getCount();
 
    for(int i=0; i < count; ++i)
        output << getNameById(i) << " " << getLastNameById(i) << std::endl;
 
    output.close();
 
}
 
void  Database::load()
{
    std::ifstream input;
    input.open("database.txt");
 
    if(!input.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
 
    while(!input.eof())
    {
        std::string name;
        input >> name;
        std::string lastname;
        input >> lastname;
 
        addRecord(name,lastname);
    }
 
    input.close();
 
}
 
void Database::printDatabase()
{
    int count = getCount();
 
    for(int i=0; i < count; ++i)
        std::cout << getNameById(i) << " " << getLastNameById(i) << std::endl;
}
 
int main()
{
    Database server;
    
    server.load();
 
    /*
    server.addRecord("Kostya","Kulakov");
    server.addRecord("Lusya","Begunova");
    server.addRecord("Vanya","Frolov");
    server.addRecord("Alex","Sensei");
    */
    server.printDatabase();
 
    //server.save();
 
    return 0;
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
22.02.2013, 22:13     Мусор при правильном считывание данных из файла #4
KostyaKulakov, а в чём смысл затеняющих объявлений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void  Database::save()
{
//////
    int count = getCount();
///////
}
void Database::printDatabase()
{
/////
    int count = getCount();
/////
}
count ведь и так доступен?
KostyaKulakov
Заблокирован
22.02.2013, 22:36  [ТС]     Мусор при правильном считывание данных из файла #5
Цитата Сообщение от IGPIGP Посмотреть сообщение
KostyaKulakov, а в чём смысл затеняющих объявлений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void  Database::save()
{
//////
    int count = getCount();
///////
}
void Database::printDatabase()
{
/////
    int count = getCount();
/////
}
count ведь и так доступен?
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
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
class Database
{
public:
    Database(){count = 0;}
 
    void  addRecord(std::string name, std::string lastname);
    std::string getNameById(int id);
    std::string getLastNameById(int id);
    int   getCount();
    void  save();
    void  load();
    void  printDatabase();
 
protected:
    int count;
    std::string name[100];
    std::string lastname[100];
};
 
int Database::getCount()
{
    return count;
}
 
void Database::addRecord(std::string name, std::string lastname)
{
    this->name[count] = name;
    this->lastname[count] = lastname;
    ++count;
}
 
std::string Database::getNameById(int id)
{
    return name[id];
}
 
std::string Database::getLastNameById(int id)
{
    return lastname[id];
}
 
void  Database::save()
{
    std::ofstream output;
    output.open("database.txt");
 
    if(!output.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
 
    output.clear();
 
    for(int i=0; i < count; ++i)
        output << getNameById(i) << " " << getLastNameById(i) << std::endl;
 
    output.close();
 
}
 
void  Database::load()
{
    std::ifstream input;
    input.open("database.txt");
 
    if(!input.is_open())
    {
        std::cerr << "Error open database.txt" << std::endl;
        exit(1);
    }
 
    while(!input.eof())
    {
        std::string name;
        input >> name;
        std::string lastname;
        input >> lastname;
 
        addRecord(name,lastname);
    }
 
    input.close();
 
}
 
void Database::printDatabase()
{
    for(int i=0; i < count; ++i)
        std::cout << getNameById(i) << " " << getLastNameById(i) << std::endl;
}
 
int main()
{
    Database server;
    
    std::cout << "Load database from file? [Y/N]: ";
 
    std::string answer_load;
    std::cin >> answer_load;
 
    if(answer_load == "Y")
        server.load();
 
    std::cout << "Add now Record? [Y/N]: ";
 
    std::string answer_add;
    std::cin >> answer_add;
 
    while(answer_add == "Y")
    {
        std::cout << "Enter Name: ";
 
        std::string name;
        std::cin >> name;
 
        std::cout << "Enter LastName: ";
 
        std::string lastname;
        std::cin >> lastname;
 
        server.addRecord(name,lastname);
 
        std::cout << "Add now Record? [Y/N]: ";
        std::cin >> answer_add;
    }
 
    server.printDatabase();
 
    std::string answer_save;
 
    if(answer_add == "Y")
    {
        std::cout << "Save database from file? [Y/N]: ";
        std::cin >> answer_save;
    }
 
    if(answer_save == "Y" && answer_add == "Y")
        server.save();
 
    return 0;
}
Yandex
Объявления
22.02.2013, 22:36     Мусор при правильном считывание данных из файла
Ответ Создать тему
Опции темы

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