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

С++ широкие символы - C++

Восстановить пароль Регистрация
 
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
11.10.2011, 15:26     С++ широкие символы #1
Господа, здравствуйте!

Дали мне в институте задание - написать консольное приложение, осуществляющее запись и чтение из 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;
        }

а как ее решить - не пойму. помогите, кто чем может. Спасибо заранее
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 15:26     С++ широкие символы
Посмотрите здесь:

C++ Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены и переписать новый текст в файл D
Алфавит. Символы операций. Специальные символы C++
C++ не могу понять задачку. Даны натуральное число n и символы s1, s2,., sn. Получить символы, принадлежащие последовательности s1, s2,., sn, которые
Широкие символы + Unicode C++
C++ Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить символы B в порядке, обратном к алфавитном
Задана строка, символы которой могут повторяться. Нужно удалить все символы строки с помощью наименьшего количества вычеркиваний C++
C++ Не получается вывести широкие символы
Широкие символы в Code Blocks C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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