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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
#1

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

01.10.2011, 17:23. Просмотров 564. Ответов 4
Метки нет (Все метки)

Просьба помочь. Что то сам не могу собразить в чем проблема.
Проблема: программа сохроняет введенные с клавиатуры символы. Если с клавиатуры введенны русские имена например: Иванов Иван. при открытие файла программа выдает непонятные символы.
Если же введенно на англ.языке: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 минуты
Никто не знает как решать эту проблему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2011, 17:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с корректным сохранением текста в файле (C++):

Определить, является ли e-mail корректным - C++
Дан email в строке. Определить, является ли он корректным(наличие символа @ и точки, наличие не менее двух символов после последней точки и...

Нюанс с dynamic_cast: может ли указанное приведение типов быть корректным? - C++
Может ли такое приведение типов (второй dynamic_cast) быть корректным?:class A {public: virtual ~A() {}}; class B : private virtual A...

Для каждого слова определить, является ли оно корректным именем - C++
1. Вводится массив слов. Для каждого слова определить, является ли оно корректным именем (первая буква - буква, остальные - буквы, цифры...

Замена текста в файле - C++
У меня есть программа которая записывает написанный в консоли текст в файл. Но мне нужно заменить некоторое количество текста начиная с...

Поиск текста в файле - C++
Добрый день. задача: находить в текстовом файле введенный с клавиатуры текст и в дальнейшем копировать строку в которой нашлось...

Фильтрация текста в файле - C++
Задача вот в чём: Имеется файл с тестовыми данными, некоторые данные повторяются в этом файле, необходимо написать программу, которая...

4
-=ЮрА=-
Заблокирован
Автор 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 не приносит желаемого эффекта (не работает )
1
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 студента ниже.."
Вася_Пупкин "и т д"

Проблема в том что когда я открываю файл там это записано так : Иванов_ИванВася_Пупкин
как решить это проблему? я пытался ставить пробелы,знаки типо : " " и т д ничего не помогло.
Надо чтобы в файле имена были так как я их ввел,может что то в коде не правильно. пожалуйста подскажите.
0
-=ЮрА=-
Заблокирован
Автор 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
0
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
01.10.2011, 21:39  [ТС] #5
Спасибо вам большое. Проблемы которые были вы помогли решить. спасибо еще раз.
Если возникнут еще вопросы,обязательно обращусь к вам.
0
01.10.2011, 21:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2011, 21:39
Привет! Вот еще темы с ответами:

Шифрование текста в файле - C++
проблема в то что в процессе работы программа должна считывать текст в файле и кодировать его. Прога работает нормально,т.е. кодирует...

Поиск текста в файле - C++
Требуется написать программу, которая находит в директории файлы с определенным текстом(точнее словом), набранным в другом файле, при этом...

Обработка текста в файле - C++
В каждой строке исходного текста содержится полное имя некоторого файла, выделить из строки название последнего каталога (без символов &quot;&quot;)...

Проблема с открытием файла для вывода текста в него. - C++
ofstream offile; void royal_flush (); void straight_flush(); int main () { //махинации royal_flush (); }


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru