Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46

Ошибка кодировки при выводе оригинального и отсортированного списка

08.10.2014, 12:03. Показов 2773. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Не могу понять, почему трабла с кодировкой? При выводе оригинального и отсортированного списка кракозябры.
Вроде, все верно прописал.

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
#include<iostream>
#include<stdlib.h>
#include<string>
#include<locale>
 
using namespace std;
 
struct Student {
    string name;
    int day;
    int month;
    int year;
};
enum Result { Less, greater, Equal };
 
Result checkDate(const Student &first, const Student &second)
{
    if (first.year > second.year) return greater;
    if (first.year < second.year) return Less;
    if (first.month > second.month) return greater;
    if (first.month > second.month) return Less;
    if (first.day > second.day) return greater;
    if (first.day > second.day) return Less;
    return Equal;
}
 
void sortStudents(Student *array, int size)
{
    for (int i = 0; i < size - 1; ++i)
    for (int j = 0; j < size - 1; ++j)
    if (checkDate(array[j], array[j + 1]) == Less)
    {
        Student temp = array[j];
        array[j] = array[j + 1];
        array[j + 1] = temp;
    }
}
 
void getInfo(Student &man)
{
    setlocale(LC_ALL, "Russian");
    cout << "ФИО: ";
    cin.clear();
    cin.ignore();
    getline(cin, man.name);
    cout << "Дата рождения (DD MM YYYY): "; cin >> man.day >> man.month >> man.year;
}
 
void show(Student *students, int size)
{
    setlocale(LC_ALL, "Russian");
    for (int i = 0; i < size; ++i)
        cout << (i + 1) << ". " << students[i].name << " (" << students[i].day << "." << students[i].month << "." << students[i].year << ")" << endl;
}
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    int size;
    cout << "Введите число студентов: "; cin >> size;
    Student *students = new Student[size];
    for (int i = 0; i < size; ++i) // Вбиваем данные
    {
        cout << "Студент №" << (i + 1) << endl;
        getInfo(students[i]);
    }
    cout << "Оригинальный лист студентов:" << endl;
    show(students, size);
    sortStudents(students, size); // Сортируем студентов
    cout << "Список отсортированных студентов:" << endl;
    show(students, size);
    delete[]students;
    system("pause");
    return 0;
}
Заранее, спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2014, 12:03
Ответы с готовыми решениями:

Ошибка кодировки при выводе на сайт
Помогите устранить следущую ошибку. Я создал базу данных, в бд создал таблицу. В таблице создал 2 столбца с русским текстом. При выполнении...

Функции Setup API, ошибка при выводе списка устройств
Вывожу данные о системной информации ПК, список устройств в файл, но компилятор указывает на невозможность использовать данные функции. ...

Потеря кодировки при выводе модального окна
Подскажи плз., куда искра уходит. Ситуация следующая: 1. Броузер - Хром 2. Открываю модальное окно из *.js вот таким способом ...

37
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 18:38  [ТС]
Студворк — интернет-сервис помощи студентам
taras atavin, а вот в этой программе
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
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <iomanip>
#include <locale.h>
using namespace std;
const int L = 10;
struct student
{
    char fam[L];
    char iniziali[5];
    int day;
    int mon;
    int year;
};
void inputStudentFile(student x[], int&n);
void outputStudentFile(student x[], int n);
void outputStudent(student x[], int n);
void sort(student x[], int n);
int main()
{
    setlocale(LC_ALL, "Russian");
    const int N = 100;
    student a[N];
    int m;
    system("cls");
    cout.setf(ios::left);
    inputStudentFile(a, m);
    cout << "\nИсходная таблица:\n\n";
    outputStudent(a, m);
    sort(a, m); //Вывод
    outputStudentFile(a, m);
} //Вывод
 
void inputStudentFile(student x[], int&n)
{
    ifstream fin;
    char file[L];
    cout << "Введите название файла:\n"; cin >> file;
    fin.open(file);
    if (fin.fail())
    {
        cout << "Невозможно открыть файл: " << file << endl;
        getche(); exit(1);
    }
    n = 0;
    do{
        fin >> x[n].fam >> x[n].iniziali >> x[n].day >> x[n].mon >> x[n].year;
        n++;
    } while (fin.good());
    n--;
    fin.close();
}
 
void outputStudentFile(student x[], int n)
{
    ofstream fout;
    int i;
    char file[L];
    cout << "\nСохранить? "; cin >> file;
    fout.open(file);
    if (fout.fail())
    {
        cout << "Файл не сохранен " << file << endl;
        getch();
    }  for (i = 0; i<n; i++)
    if (x[i].mon == 9 || x[i].mon == 10 || x[i].mon == 11)
    {
        fout << x[i].fam << " " << x[i].iniziali << " " << x[i].day << " " << x[i].mon << " " << x[i].year << endl;
        i = n;
    } //Считывание записей
    cout << "Файл успешно сохранен";
    getch();
    fout.close();
}
void outputStudent(student x[], int n)
{
    int i;
    cout << "Фамилия   И.О        Д        М        Год\n";
    for (i = 0; i<n; i++)
        cout << setw(10) << x[i].fam << setw(11) << x[i].iniziali << setw(9) << x[i].day << setw(9) << x[i].mon << setw(11) << x[i].year << endl;
    getch();
}
void sort(student x[], int n)
{
    int i, fl;
    student t;
    do {
        fl = 0;
        for (i = 0; i<n; i++)
        if (x[i].year > x[i + 1].year)
        {
            t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
        }
        else if (x[i].year == x[i + 1].year)
        {
            if (x[i].mon > x[i + 1].mon)
            {
                t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
            }
            else if (x[i].mon == x[i + 1].mon)
            {
                if (x[i].day > x[i + 1].day)
                {
                    t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
                }
            }
        }
    } while (fl);
        {
            cout << "\nСтуденты:\n\n";
            cout << "Фамилия   И.О        Д        М        Год\n";
            cout << setw(10) << x[i].fam << setw(11) << x[i].iniziali << setw(9) << x[i].day << setw(9) << x[i].mon << setw(11) << x[i].year << endl;
            getche();
        }
    }
Не поможете сделать так, чтобы сортировка шла по увеличению возраста?
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 18:47
Цитата Сообщение от st12345 Посмотреть сообщение
Не поможете сделать так, чтобы сортировка шла по увеличению возраста?
А сейчас то как?
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 18:51  [ТС]
Выводится только один студент.
Миниатюры
Ошибка кодировки при выводе оригинального и отсортированного списка  
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 18:52
Отсортируйте и выведите в цикле. В чём проблема то? Решение же уже было.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 18:53  [ТС]
taras atavin, так я и попросил поправить сортировку. Так как не знаю, как исправить.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 18:55
Она у Вас уже по возрастанию.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 19:00  [ТС]
taras atavin, вот эта сортировка уже по возрастанию?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    do {
        fl = 0;
        for (i = 0; i<n; i++)
        if (x[i].year > x[i + 1].year)
        {
            t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
        }
        else if (x[i].year == x[i + 1].year)
        {
            if (x[i].mon > x[i + 1].mon)
            {
                t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
            }
            else if (x[i].mon == x[i + 1].mon)
            {
                if (x[i].day > x[i + 1].day)
                {
                    t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
                }
            }
        }
    } while (fl);
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 19:04  [ТС]
У меня вот как выводится всё это.
Миниатюры
Ошибка кодировки при выводе оригинального и отсортированного списка  
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 19:12
А, там же не возраст, а год рождения. Поменяйте > на <.

Добавлено через 1 минуту
Цитата Сообщение от st12345 Посмотреть сообщение
while (fl); { cout << "\nСтуденты:\n\n"; cout << "Фамилия И.О Д М Год\n"; cout << setw(10) << x[i].fam << setw(11) << x[i].iniziali << setw(9) << x[i].day << setw(9) << x[i].mon << setw(11) << x[i].year << endl; getche(); }
Какое это имеет отношение к сортировке?
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
15.10.2014, 20:46  [ТС]
taras atavin, поменял.
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
void sort(student x[], int n)
{
    int i, fl;
    student t;
    do {
        fl = 0;
        for (i = 0; i<n; i++)
        if (x[i].year < x[i + 1].year)
        {
            t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
        }
        else if (x[i].year == x[i + 1].year)
        {
            if (x[i].mon < x[i + 1].mon)
            {
                t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
            }
            else if (x[i].mon == x[i + 1].mon)
            {
                if (x[i].day < x[i + 1].day)
                {
                    t = x[i]; x[i] = x[i + 1]; x[i + 1] = t; fl = 1;
                }
            }
        }
Тот же самый результат.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 21:07
Разберитесь, что и когда хотите выводить. У Вас в функции сортировки бесконечный цикл вывода.
Цитата Сообщение от st12345 Посмотреть сообщение
while (fl); { cout << "\nСтуденты:\n\n"; cout << "Фамилия И.О Д М Год\n"; cout << setw(10) << x[i].fam << setw(11) << x[i].iniziali << setw(9) << x[i].day << setw(9) << x[i].mon << setw(11) << x[i].year << endl; getche(); }
fl в цикле не меняется, он бесконечен. i тоже не меняется, поэтому следующий студент не выведется. При этом сама подзадача сортировки с выводом ни как не связана.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
16.10.2014, 14:42  [ТС]
taras atavin, а как тогда правильно будет? Можно код, пожалуйста?

Добавлено через 17 часов 26 минут
taras atavin, while (fl) убрать надо, получается?
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.10.2014, 19:49
Нет. Убрать надо весь кусок, вывод вызвать отдельно после сортировки.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
16.10.2014, 21:06  [ТС]
taras atavin, а можно код, пожалуйста? Не совсем просто понимаю, как реализовать.

Добавлено через 14 минут
C++
1
2
3
4
5
6
            cout << "\nСтуденты:\n\n";
            cout << "Фамилия   И.О        Д        М        Год\n";
            sort (student x[], int n);
            getche();
        }
    }
Так попробовал. Не сработало.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.10.2014, 17:59
Сначал сорт, потом аут. Это две разных функции.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
25.10.2014, 23:22  [ТС]
C++
1
2
3
4
5
6
7
            sort (student x[], int n);
            cout << "\nСтуденты:\n\n";
            cout << "Фамилия   И.О        Д        М        Год\n";
            getche();
        }
 
    }
Так?
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.10.2014, 08:45
Издеваешься?
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 46
26.10.2014, 14:03  [ТС]
taras atavin, так я Вас попросил код написать. Ну я не понимаю, как реализовать эту задачу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2014, 14:03

Задание кодировки при выводе данных в датагрид
Есть небольшая проблема, при выводе из файла dbf в datagridview русские слова отображаются как разные символы, ну тут в принципе проблема...

Заполнение списка и вывод отсортированного списка на экран
нужно Создать список,значения которого равны значениям массива.Создать список,равный отсортированному первому списку. ...

При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор
Суть действий: При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор. Раньше я...

Программа зависает при выводе однонаправленного списка
создал однонаправленный список. все компилится, но при попытке вывода - прога зависает уже горит, так как уже создал буффер для хранения...

IMAP получения отсортированного списка писем
Всем привет. Стоит такая задача. Надо получить ограниченный список (к примеру, не больше 50) и список этот должен быть отсортирован по...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru