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

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

Войти
Регистрация
Восстановить пароль
 
KostyaKulakov
Заблокирован
#1

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

22.02.2013, 21:37. Просмотров 374. Ответов 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
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()
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 21:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мусор при правильном считывание данных из файла (C++):

Считывание из текстового файла. Считывает мусор без остановки - C++
Считывает мусор из файла без останови.Прекращение считывания при обнаружении конца теста в файле есть. #include&lt;iostream&gt; ...

Мусор при чтении файла - C++
При чтений текста из файла программа вставляет букву я на конце Как убрать?

Считывание данных из файла - C++
Есть файл в котором содержится число 145. Мне нужно считать из файла это число без числа 5, то есть все числа до числа 5. Помогите.

Считывание данных с файла - C++
Здравствуйте, помогите пожалуйста, программа не может прочитать данные из файла и я не знаю почему, вот код (dev-c++) if (*c==13) ...

Считывание данных из файла - C++
Всем здравствуйте... вообщем создан пользовательский класс пассажир class Passenger: public Human { private: string...

Считывание данных из файла - C++
Всем привет, возник вопрос. Нужно считывать из .txt файла координаты точек в массив, размерность которого . Но т.к числа разделены &quot;,&quot; ,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 21:41 #2
Сделайте проверку на eof и выход из while() сразу после первого input >>.
0
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;
}
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
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 ведь и так доступен?
1
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 22:36
Привет! Вот еще темы с ответами:

Считывание данных из файла - C++
Нужно реализовать вывод данных структуры из файла.. Задание: Заполнение футбольных команд и вывод их на экран. Вводим: название...

Считывание данных из файла - C++
char y; ifstream fin; fin.open(&quot;maps1.txt&quot;); fin &gt;&gt; y; fin.close(); cout &lt;&lt; y; Почему-то не работает следующий код. В...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.02.2013, 22:36
Ответ Создать тему
Опции темы

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