Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17

Проблема с русским символом К в программе

13.05.2021, 18:01. Показов 6434. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день коллеги.
Прошу помощи в с++ сам я не программист ++ и лезу в них когда надо ,В данном случае товарищ попросил сделать ему прогу для курсовой . Я ее сделал, но столкнулся с 1 проблемой: после записи заглавной буквы К методом fread считываются кракозябры.

Тема курсовой: телефонный справочник.
среда для разработки VS2019 С++ CLI с использованием windows form .
AddNewContact.h
C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <iostream>
#include <fstream>
#include <locale>
#include <string>
#include <msclr\marshal_cppstd.h>
#include "ResourceContact.h"
#include <corecrt_io.h>
далее описание построение формы.
Функция записи в txt файл;
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
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
    {
        FILE *fp = fopen("DataText.txt", "r+");
        int n = 0;  
        fread(&n, sizeof(int), 1, fp); //из существующего файла считываем количество контактов
        n = n + 1;
        Contact* thisContact = new Contact;
        thisContact->number = n;
        wchar_t* fio = thisContact->fio;
        for (int i = 0; i < textBox1->Text->Length; i++)
        {   
            fio[i] = textBox1->Text[i];
        }
        thisContact->fio[textBox1->Text->Length] = L'\0';
        wchar_t* address = thisContact->address;
            for (int i = 0; i < textBox3->Text->Length; i++)
            {   
                address[i] = textBox3->Text[i];
            }
            thisContact->address[textBox3->Text->Length] = L'\0';
            wchar_t* tel = thisContact->tel;
            for (int i = 0; i <maskedTextBox2->Text->Length; i++)
            {
                tel[i] = maskedTextBox2->Text[i];
            }
            thisContact->tel[maskedTextBox2->Text->Length] = L'\0';
            wchar_t* day=new wchar_t[2];
            day[0] = maskedTextBox1->Text[0];
            day[1]=  maskedTextBox1->Text[1];
            thisContact->day = WideToInt(day,2);
            wchar_t* month=new wchar_t[2]; 
            month[0] = maskedTextBox1->Text[3];
            month[1] = maskedTextBox1->Text[4];
            thisContact->month = WideToInt(month,2);
            wchar_t* year= new wchar_t[4];
            year[0] = maskedTextBox1->Text[6];
            year[1] = maskedTextBox1->Text[7];
            year[2] = maskedTextBox1->Text[8];
            year[3] = maskedTextBox1->Text[9];
            thisContact->year = WideToInt(year,4);
            //заносим информацию об очередном контакте в конец файла
            fseek(fp, 0, SEEK_END);
            fwrite(thisContact, sizeof(Contact), 1, fp);
            long size = ftell(fp);
            //заносим информацию о количестве контактов в начало файла
            fseek(fp, 0, SEEK_SET);
            fwrite(&n, sizeof(int), 1, fp);
            delete thisContact;
            delete day;
            delete month;
            delete year;
            fclose(fp);
            MessageBox::Show("Готово");
    }
ResourceContact.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
struct Contact
{
    int number;
    wchar_t fio[150];
    wchar_t address[250];
    wchar_t tel[14];
    int day;
    int month;
    int year;
};


Считывание данных:
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
#include <windows.h>
#include <iostream>
#include <cstdint>
#include <fstream>
#include <locale>
#include <string>
#include <msclr\marshal_cppstd.h>
#include "ResourceContact.h"
#include "AddNewContact.h"
#include <corecrt_io.h>
 
 
void loadlib()
        {
            FILE* fp ;
            int i = 0;
            fp = fopen("DataText.txt", "r");
            if (fp != NULL)
            {
                int n=0;
                dataGridView1->Rows->Clear();
                fread(&n, sizeof(int), 1, fp);
                i = n;
                int row = 0;
                while (i != 0)
                {
                    String^ buf;
                    Contact* current = new Contact;
                    fread(current, sizeof(Contact), 1, fp);
                    if (!chekSelection(*current)) {
                        i--;
                        delete current;
                        continue;
                    }
                    dataGridView1->Rows->Add();
                    dataGridView1->Rows[row]->Cells[0]->Value = current->number;
                    int m=0;
                    while (current->fio[m] != L'\0')
                    {
                        buf = buf + current->fio[m];
                        m++;
                    };
                    dataGridView1->Rows[row]->Cells[1]->Value = buf;
                    buf = "";
                    m = 0;
                    while (current->tel[m] != L'\0')
                    {
                        buf = buf + current->tel[m];
                        m++;
                    };
                    dataGridView1->Rows[row]->Cells[2]->Value = buf;
                    buf = "";
                    m = 0;
                    while (current->address[m] != L'\0')
                    {
                        buf = buf + current->address[m];
                        m++;
                    };
                    dataGridView1->Rows[row]->Cells[3]->Value = buf;
                    buf = "";
                    buf = current->day.ToString() + "." + current->month.ToString() + "." + current->year.ToString();
                    dataGridView1->Rows[row]->Cells[4]->Value = buf;
                    dataGridView1->Rows[row]->Cells[5]->Value = "Удалить";
                    i--;
                    row++;
                    delete  current;
 
                }
 
 
 
 
 
            }
            fclose(fp);
        
        }

fread(current, sizeof(Contact), 1, fp); в этой строчке в структуре если я записывал заглавную буку К дальше я получаю фигню. Подскажите пожалуйста, что делать.

Прикладываю фотку с результатом работы, в 3 строке имя Константин.
Миниатюры
Проблема с русским символом К  в программе  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2021, 18:01
Ответы с готовыми решениями:

На вход программе подается набор символов, заканчивающийся символом 0 (в программе на языке Бейсик символы можно вводить
На вход программе подается набор символов, заканчивающийся символом 0 (в программе на языке Бейсик символы можно вводить по одному в...

Проблема с русским языком
В VB6 если в коде переключить язык ввода на русский, то печатает абракадабру. Может кто-нибудь знает патч какой-нибудь. Пожалуйста!!!

Проблема с русским в апплетах
Не подскажете почему если выводишь текст в окне апплета по-русски и компилируешь JDK 1.0.1, то в место русских символов в окне апплета (в...

3
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
13.05.2021, 18:51
Для fread/fwrite нужно открывать файл в бинарном режиме:
C++
1
       FILE *fp = fopen("DataText.txt", "r+b");
C++
1
fp = fopen("DataText.txt", "rb");
Я точно не помню, какой код у символа EOF в текстовом режиме,
но, похоже, что это именно упомянутая Вами заглавная русская К
0
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
13.05.2021, 20:05  [ТС]
Спасибо большое попробую. Я тоже думал, что стоит открыть в бинарном режиме , но не знал сработает ли это с текстовым файлом.
0
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
20.05.2021, 17:25  [ТС]
Все сработало спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2021, 17:25
Помогаю со студенческими работами здесь

Проблема с русским языком
Вот такое у меня во всех приложениях с русским языком. Использую Windows LTSC 1809. Помогите решить,пожалуйста.

проблема с русским языком
народ подскажите кто знает! имею базу данных с значениями полей как на русском так и на англ создавал так set...

Проблема с русским текстом в форме
С некоторых пор введенный по-русски текст из формы передается в таком виде %CF%F0%EE%E1%EB%E5%EC%E0... как это вылечить?

HTMLEncode - Проблема с русским языком
Заранее извиняюсь, если кому то вопрос покажется глупым. В процессе изучения разбирал скрипт гостевой книги скачанный с Relib, Там...

OJB + Firebird проблема с русским языком
Ломается кодировка при занесении русских букв. при создании БД указана кодировка win1251 так что там все ок при обычном коннекте в БД...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через 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
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru