11.10.2011, 15:26. Просмотров 713. Ответов 0
Господа, здравствуйте!
Дали мне в институте задание - написать консольное приложение, осуществляющее запись и чтение из txt файла. В ходе написания возникли проблемы с кирилицей, мне посоветовали использовать широкие символы, после чего приложение перестало работать, почему то цил чтения из файла стал бесконечным...
Помогите поправить, пожалуйста. Писал в visual studio.
Вот код класса :
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <vector> // массивы векторов
#include <string> // Подключение работы со строками
using namespace std; // область имён std(стандартная область имён)
#pragma once
class my
{
public:
vector <int> number;
vector <wstring> name;
vector <wstring> patronymic;
vector <wstring> surname;
vector <wstring> sex;
vector <wstring> stat;
vector <wstring> guest;
void output_workers();
void add_workers();
void del_workres();
void memory_clear();
}; |
|
Вот код функции записи в файл:
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
| void my::add_workers()
{
int in;
wstring st;
char ch, point;
float fl;
wifstream f("db.txt");
f.imbue(locale(".ACP"));
while (true)
{
if (!f.eof())
{
f >> in; number.push_back(in);
f >> st; name.push_back(st);
f >> st; patronymic.push_back(st);
f >> st; surname.push_back(st);
f >> st; sex.push_back(st);
f >> st; stat.push_back(st);
f >> st; guest.push_back(st);
}
else
break;
}
if ( number.size() < 98)
{
cout << "Внесение в БД нового участника" << endl;
cout << "Введите номер: "; cin >> in;
for (int i = 0; i < number.size(); i++)
{
if (in == number[i])
{
system ("cls");
cout << "Внесение в БД нового участника" << endl;
cout << "Введённый вами номер нуже существует..."<< endl;
cout << "Введите новый: "; cin >> in;
i = -1;
}
}
number.push_back(in);
wcout << L"Введите имя: "; wcin >> st; name.push_back(st);
wcout << L"Введите отчество: "; wcin >> st; patronymic.push_back(st);
wcout << L"Введите фамилию: "; wcin >> st; surname.push_back(st);
wcout << L"Выберете пол: "<<endl<< L"1 - Мужской;"<<endl<< L"2 - Женский"<<endl; wcin >> st; sex.push_back(L"Мужской");
wcout << L"Выберете статус участника: "<<endl<< L"1 - Студент"<<"2 - Аспирант"<< L"3 - Преподаватель"<<endl; wcin >> st; stat.push_back(L"Студент");
wcout << L"Выберете роль участника: "<<endl<<L"1 - Выступающий"<<endl<< L"2 - Гость"<<endl; wcin >> st; guest.push_back(L"Выступающий");
system ("cls");
wcout << "Вы уверены что хотите добавить участника: " << endl;
wcout << name[name.size()-1] << " ";
wcout << patronymic[patronymic.size()-1] << " ";
wcout << surname[surname.size()-1] << " ";
//cout << sex[sex.size()-1] << " ";
//cout << stat[stat.size()-1] << " ";
wcout << guest[guest.size()-1] << " (y/n?) "; cin >> point;
if (point == 'y')
{
for(int i = guest.size()-1; i > 0; i--)
for (int j = 0; j < i; j ++)
{
if (number[j] > number[j+1])
{
swap(number[j],number[j+1]);
swap(name[j],name[j+1]);
swap(patronymic[j],patronymic[j+1]);
swap(surname[j],surname[j+1]);
swap(sex[j],sex[j+1]);
swap(stat[j],stat[j+1]);
swap(guest[j],guest[j+1]);
}
}
wofstream of("db.txt");
for (int i = 0; i < guest.size(); i++)
{
of << number[i] << " ";
of << name[i] << " ";
of << patronymic[i] << " ";
of << surname[i] << " ";
of << sex[i] << " ";
of << stat[i] << " ";
if (i+1 < guest.size())
of << guest[i] << endl;
else
of << guest[i];
}
}
memory_clear();
system ("cls");
}
else
{
cout << "Отказ от выполнения операции" << endl;
system ("pause");
system ("cls");
}
} |
|
т.е. проблема где-то сдесь:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| while (true)
{
if (!f.eof())
{
f >> in; number.push_back(in);
f >> st; name.push_back(st);
f >> st; patronymic.push_back(st);
f >> st; surname.push_back(st);
f >> st; sex.push_back(st);
f >> st; stat.push_back(st);
f >> st; guest.push_back(st);
}
else
break;
} |
|
а как ее решить - не пойму. помогите, кто чем может. Спасибо заранее