Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.10.2021
Сообщений: 18

Русский текст из файла

04.05.2022, 00:29. Показов 606. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть задачи: из файла записываются данные в структуру и дальше происходит поиск книг по каким-то критериям. В целом всё работает, но если в файле хранится русский текст, то выводит кракозябры. Как это исправить? Заранее спасибо.
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <windows.h>
struct book
{
    char shifr[5];
    char fio[30];
    char name[40];
    int year;
}arr[10];
 
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i, inputyear;
    char namefile[256], bukva;
    FILE* f = NULL;
 
      f = fopen("D:\\mytext2.txt", "rt");
    if (f == NULL)                                        
    {                                                     
        cout << "Файл не найден, повторите ввод:" << endl;
    }
 
    for (i = 0; i < 5; i++)
    {
        fscanf(f, "%s", &arr[i].shifr);
        fscanf(f, "%s", &arr[i].fio);
        fscanf(f, "%s", &arr[i].name);
        fscanf(f, "%i", &arr[i].year);
    }
    fclose(f);
 
    for (i = 0; i < 5; i++)
        {
        cout << arr[i].shifr << " ";
        cout << arr[i].fio << " ";
        cout << arr[i].name << " ";
        cout << arr[i].year << endl;
        }
    
    cout << "Введите букву, с которой начинается шифр:" << endl;
    cin >> bukva;
    cout << "Введите год издания книги:" << endl;
    cin >> inputyear;
 
    cout << "Найденные записи:" << endl;
    for (i = 0; i < 5; i++)
    {
        if ((arr[i].shifr[0] == bukva) && (arr[i].year == inputyear))
        {
            cout << arr[i].name << endl;
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2022, 00:29
Ответы с готовыми решениями:

Не считывается русский текст из файла ANSI
Имеется файл на русском языке (и немного английском) в кодировке ANSI. При попытке считывания, в консоль выводятся только знаки препинания,...

Считать русский текст из файла через ifstream
Здравствуйте, подскажите как правильно считать русский текст из файла? (файл создан в стандартной кодировке Блокнота). Инициализирую...

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой кодировки?

5
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,682
04.05.2022, 01:01
Цитата Сообщение от whereismyW Посмотреть сообщение
но если в файле хранится русский текст, то выводит кракозябры. Как это исправить? Заранее спасибо.
Файл-то где?
1
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
04.05.2022, 01:02
C++
1
setlocale(0,"rus");
вместо любых
C++
1
SetConsole
1
0 / 0 / 0
Регистрация: 06.10.2021
Сообщений: 18
04.05.2022, 14:05  [ТС]
Немного изменил программу. И файл, да.

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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <iostream>
 
struct book
{
    char shifr[5];
    char fio[30];
    char name[40];
    int year;
}arr[10];
 
using namespace std;
int main()
{
    setlocale(0, "rus");
    int i, inputyear;
    char namefile[256], bukva;
    FILE* f = NULL;
 
    f = fopen("D:\\mytext.txt", "rt");
    if (f == NULL)                                        
    {                                                     
        cout << "Файл не найден, повторите ввод:" << endl;
    }
 
    for (i = 0; i < 5; i++)
    {
        fscanf(f, "%s", &arr[i].shifr);
        fscanf(f, "%s", &arr[i].fio);
        fscanf(f, "%s", &arr[i].name);
        fscanf(f, "%i", &arr[i].year);
    }
    fclose(f);
 
    for (i = 0; i < 5; i++)
        {
        cout << arr[i].shifr[0] << arr[i].shifr[1] << arr[i].shifr[2] << arr[i].shifr[3] << arr[i].shifr[4] << " ";
        cout << arr[i].fio << " ";
        cout << arr[i].name << " ";
        cout << arr[i].year << endl;
        }
    
    cout << "Введите букву, с которой начинается шифр:" << endl; // поиск по записям
    cin >> bukva;
    cout << "Введите год издания книги:" << endl;
    cin >> inputyear;
 
    cout << "Найденные записи:" << endl;
    for (i = 0; i < 5; i++)
    {
        if ((arr[i].shifr[0] == bukva) && (arr[i].year == inputyear))
        {
            cout << arr[i].name << endl;
        }
    }
}
Вложения
Тип файла: txt mytext.txt (804 байт, 11 просмотров)
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,682
04.05.2022, 14:52
Цитата Сообщение от whereismyW Посмотреть сообщение
И файл, да.


Кодировка UTF-8:
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
//#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
 
struct book
{
    char shifr[5];
    char fio[30];
    char name[40];
    int year;
}arr[10];
 
using namespace std;
int main()
{
    //setlocale(0, "rus");
    system("chcp 65001 && cls");
    int i, inputyear;
    char namefile[256], bukva;
    FILE* f = NULL;
 
    f = fopen("mytext.txt", "rt");
    if (f == NULL)                                        
    {                                                     
        cout << "Файл не найден, повторите ввод:" << endl;
        return -1;
    }
 
    for (i = 0; i < 5; i++)
    {
        fscanf(f, "%s", &arr[i].shifr);
        fscanf(f, "%s", &arr[i].fio);
        fscanf(f, "%s", &arr[i].name);
        fscanf(f, "%i", &arr[i].year);
    }
    fclose(f);
 
    for (i = 0; i < 5; i++)
        {
        cout << arr[i].shifr[0] << arr[i].shifr[1] << arr[i].shifr[2] << arr[i].shifr[3] << arr[i].shifr[4] << " ";
        cout << arr[i].fio << " ";
        cout << arr[i].name << " ";
        cout << arr[i].year << endl;
        }
    
    cout << "Введите букву, с которой начинается шифр:" << endl; // поиск по записям
    cin >> bukva;
    /*cout << "Введите год издания книги:" << endl;
    cin >> inputyear;
 
    cout << "Найденные записи:" << endl;
    for (i = 0; i < 5; i++)
    {
        if ((arr[i].shifr[0] == bukva) && (arr[i].year == inputyear))
        {
            cout << arr[i].name << endl;
        }
    }*/
    
    return EXIT_SUCCESS;
}
1
0 / 0 / 0
Регистрация: 06.10.2021
Сообщений: 18
04.05.2022, 16:12  [ТС]
Спасибо, в целом проблема решилась. А остальные недочёты постараюсь решить самостоятельно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2022, 16:12
Помогаю со студенческими работами здесь

пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system ( " echo текст " );
пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system ( &quot; echo текст &quot; );

Русский текст
Помогите сделать на русском в консоли ввод и вывод! Пишу в консоли русскими а выдаёт иероглифы! #include &lt;iostream&gt; ...

Русский текст в консоли
Пользуюсь книгой для обучения visual с++, дан базовый код #include &lt;iostream&gt; using std::cout; using std::endl; int main() { ...

Русский текст вывод
братцы есть быдло код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; #include &lt;vector&gt; #include&lt;locale.h&gt; ...

string русский текст
Привет.. вобщем тут по примеру делал что-то типа телефонной книги(да практически все списал), так вот, не работает, но по отладке видно,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru