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

Проблема с корректным сохранением текста в файле - C++

Восстановить пароль Регистрация
 
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
01.10.2011, 17:23     Проблема с корректным сохранением текста в файле #1
Просьба помочь. Что то сам не могу собразить в чем проблема.
Проблема: программа сохроняет введенные с клавиатуры символы. Если с клавиатуры введенны русские имена например: Иванов Иван. при открытие файла программа выдает непонятные символы.
Если же введенно на англ.языке:Ivanov... или же цифры : 1,2,3 Все нормально.
Собственно хотелось бы узнать в чем проблема. я подозреваю дело в кодирофке. но не могу собразить как сделать так что б при открытие все было хорошо.
Пожалуйста подскажите поподробнее,в Си недавно... многово не знаю...

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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
 
#define len 50
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
 
    int x,kolstud,i;
    char *a;
    char stud[10000];
    char arr[len];
 
    printf("1:Создать файл о студентах.\n");
    printf("2:Вывести файл о студентах.\n");
    printf("3:Выйти из программы.\n");
    scanf("%d",&x);
 
    if(x==1)
    {
        FILE *pTextFile = fopen("D:\\Students.txt", "a+");
        printf("Введите кол-во студентов: ");
        scanf("%d",&kolstud);
         a=(char*)malloc(kolstud*sizeof(char));
         printf("Введите ФИО студентов: \n");
         for(i=0; i < kolstud; i++)
         {
             a[i]=0;
             scanf("%s",&stud);
                                   fprintf(pTextFile, "%s",stud);
         }
        
 
         return EXIT_SUCCESS;
         free(a);
 
 
    }   
        
        if (x==2)                                      
    {
        FILE *pTextFile = fopen("D:\\Students.txt", "r");
        if(pTextFile == NULL)
        {
         printf("Ошибка. Файл не создан\n");
        return EXIT_FAILURE;
    
    }
        while(fgets(arr, len, pTextFile) != NULL)            
            {
                printf("\n");
        printf("%s\n",arr);
    }
        fclose(pTextFile);
    return EXIT_SUCCESS;
        }
Добавлено через 2 часа 56 минут
ап. (5 символов)

Добавлено через 1 час 43 минуты
Никто не знает как решать эту проблему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2011, 17:23     Проблема с корректным сохранением текста в файле
Посмотрите здесь:

C++ удаление текста в бинарном файле
C++ Фильтрация текста в файле
Поиск текста в файле C++
C++ Поиск и замена текста в файле
Алгоритм определения наличия текста в файле. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
01.10.2011, 17:46     Проблема с корректным сохранением текста в файле #2
Цитата Сообщение от MonteCristo Посмотреть сообщение
Если с клавиатуры введенны русские имена например: Иванов Иван. при открытие файла программа выдает непонятные символы.
Если же введенно на англ.языке:Ivanov... или же цифры : 1,2,3 Все нормально.
Русские шрифты в консоли
И ещё один вариант руссификации
Перегрузка оператора вывода (Для С++)
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
ostream& operator<<(ostream &stream,char* s)
{
    for(char* ps=s; *ps; ps++)
    {
        if(*ps=='Вё')
            stream<<char(241);
        else 
        {
            if(*ps=='ВЁ')
                stream<<char(240);
            else 
            {
                if(*ps>=-64 && *ps<=-17)
                    stream<<char(*ps+64+128);
                else
                {
                    if(*ps<0)
                        stream<<char(*ps+64+176);
                    else
                        stream<<*ps;
                }
            }
        }
    }
    return stream;
}


Добавлено через 1 минуту
Цитата Сообщение от MonteCristo Посмотреть сообщение
setlocale(LC_ALL,"Russian");
- данная функция в старых версиях Visual Studio не приносит желаемого эффекта (не работает )
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
01.10.2011, 18:34  [ТС]     Проблема с корректным сохранением текста в файле #3
"- данная функция в старых версиях Visual Studio не приносит желаемого эффекта (не работает )" в 2010 visual работает ^^

По поводу "Перегрузка оператора вывода (Для С++)" не понял куда это и с чем это )
а вот другой вариант по пробую. но мне кажеться это не совсем то. Там русский шрифт в консоли,а тут вывод русских букв в файл...

Добавлено через 15 минут
Юрий,спасибо мне помогло вот это :
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Но у меня еще 1 проблема,как мне реализовать построчность в файле.
Тоесть: я ввожу 1 студента : Иванов_Иван "нажима enter и ввожу 2 студента ниже.."
Вася_Пупкин "и т д"

Проблема в том что когда я открываю файл там это записано так : Иванов_ИванВася_Пупкин
как решить это проблему? я пытался ставить пробелы,знаки типо : " " и т д ничего не помогло.
Надо чтобы в файле имена были так как я их ввел,может что то в коде не правильно. пожалуйста подскажите.
-=ЮрА=-
Заблокирован
Автор FAQ
01.10.2011, 20:45     Проблема с корректным сохранением текста в файле #4
MonteCristo, я не просто так писал, а дал вам универсальное средство, введите текстовую строку кирилицей и посмотрите в выходной файл

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
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
 
//Руссификация консоли
ostream& operator<<(ostream &stream,char* s)
{
    for(char* ps=s; *ps; ps++)
    {
        if(*ps=='ё')
            stream<<char(241);
        else 
        {
            if(*ps=='Ё')
                stream<<char(240);
            else 
            {
                if(*ps>=-64 && *ps<=-17)
                    stream<<char(*ps+64+128);
                else
                {
                    if(*ps<0)
                        stream<<char(*ps+64+176);
                    else
                        stream<<*ps;
                }
            }
        }
    }
    return stream;
}
 
int main()
{
    char str[256];
    std::cout<<"Введите текст для записи\r\n>";
    std::cin.getline(str,255);
 
    ofstream ofs("test.txt");
    if(!ofs)
        std::cout<<"Ошибка доступа к test.txt\r\n";
    else
    {
        ofs<<str;
        ofs.close();
    }
    std::cout<<"Введите любой символ для продолжения\r\n";
    getch();
    return 0;
}
Добавлено через 1 час 38 минут
Цитата Сообщение от MonteCristo Посмотреть сообщение
Но у меня еще 1 проблема,как мне реализовать построчность в файле.
Тоесть: я ввожу 1 студента : Иванов_Иван "нажима enter и ввожу 2 студента ниже.."
Вася_Пупкин "и т д"
- либо добавляйте к исходной строке "\r\n" либо оснастите программу дополнительным выводом в файл указанных символов окончания строки

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ofs<<str;
- после этого впишите ofs<<"\r\n";
Всё же рекомендую Вам попробовать использование перегрузку оператора вывода как в посте 4
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
01.10.2011, 21:39  [ТС]     Проблема с корректным сохранением текста в файле #5
Спасибо вам большое. Проблемы которые были вы помогли решить. спасибо еще раз.
Если возникнут еще вопросы,обязательно обращусь к вам.
Yandex
Объявления
01.10.2011, 21:39     Проблема с корректным сохранением текста в файле
Ответ Создать тему
Опции темы

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