0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 28
Записей в блоге: 1
1

Файл: Почему после записи текста в файл, внутри добавляются какие-то буквы, которые не вводились? Как от них избаваться?

13.06.2018, 15:32. Показов 654. Ответов 9

Почему после записи текста в файл, внутри добавляются какие-то буквы, которые не вводились(В моем случае это буквы М)?
И как их убрать?
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
119
120
121
122
123
124
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <windows.h>
#include <fstream>
#define N 70
using namespace std;
 
 
 
struct Abiturient
{
    char name[30];
    char spec[20];
    int exam[9];
    char garder[2];
};
 
Abiturient Input();
void Output(Abiturient st);
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    ofstream fout;
    ifstream fin;
    Abiturient st;
    int n = 0;
    do {
 
        cout << "\n\n Зробiть свiй вибiр :";
        cout << "\n1 - Запис"
            << "\n2 - Подивитися все"
            << "\n3 - Группа БС"
            << "\n0 - Вихiд\n\nВаша вiдповiдь:   ";
        int answ;
        cin >> answ;
        switch (answ)
        {
        case 0: return 0;
        case 1:
            st = Input();
 
            fout.open("data2.txt", ios::app);
            fout.write((char*)&st, sizeof(st));
            fout.close();
            n++;
            break;
        case 2:
            fin.open("data2.txt", ios::app);
            while (true)
            {
                fin.read((char*)&st, sizeof(st));
                if (fin.eof())
                    break;
                Output(st);
            }
            fin.close();
            break;
        case 3:
            fin.open("data2.txt", ios::app);
    /*      while (true)
            {
                fin.read((char*)&st, sizeof(st));
                if (fin.eof())
                    break;
                break;
                if (strcmp(st.spec, "BS") == 0)
                    Output(st);
            }
            fin.close();*/
 
            if (!fin.is_open())
            {
                cout << "ERROR!!!" << endl;
            }
            else
            {
                cout << "Файл вiдкритий!" << endl;
                string str;
                while (!fin.eof())
                {
                    str = "";
                    std::getline(fin, str);
                    cout << str << endl;
                }
                fin.close();
            }
            break;
        }
    } while (true);
 
    system("pause");
    return 0;
}
 
 
Abiturient Input()
{
    Abiturient st;
    cout << "Введiть ПIФ   ";
    cin >> st.name;
    cout << "Введiть стать   ";
    cin >> st.garder;
    cout << "Введiть спецiальнiсть   ";
    cin >> st.spec;
    cout << "Введiть результати вступних iспитiв:   ";
    cin >> st.exam[0] >> st.exam[1] >> st.exam[2];
    return st;
}
 
void Output(Abiturient st)
{
    cout << "\n|" << setw(20) << st.name << " | " << setw(3) << st.spec << " | "
        << setw(2) << st.garder << " | "
        << st.exam[0] << " " << st.exam[1] << "  " << st.exam[2];
 
}
Миниатюры
Файл: Почему после записи текста в файл, внутри добавляются какие-то буквы, которые не вводились? Как от них избаваться?  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2018, 15:32
Ответы с готовыми решениями:

Как сделать чтобы в файл Excel вводились маленькие буквы?
как сделать чтобы в эксель файл вводились маленькие буквы? я знаю что если большие то if left(st,...

Webbrowser. Как отследить все события, которые происходят в окне после деятельности полльзователя и некоторые из них записать в файл?
Имеется webbrowser расположенный на форме. Необходимо отслеживать все события, которые происходят...

Не добавляются записи в файл
uses crt; type uch=record end; type fl=file of uch; var p,k,i,n,nomer,kolkomn,itazh:integer; ...

Не читается файл после записи зашифрованного текста
Зравствуйте, форумчане. Собственно сабж. Курсовая по шифрованию в с++. Текст читаю из файла,...

9
Модератор
Эксперт С++
12118 / 9786 / 5913
Регистрация: 18.12.2011
Сообщений: 26,260
13.06.2018, 15:42 2
Цитата Сообщение от VikkyLand Посмотреть сообщение
как их убрать
В конце текста добавлять терминальный ноль.
0
0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 28
Записей в блоге: 1
13.06.2018, 16:07  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
терминальный ноль
впервые слышу об этом, как правильно\куда правильно его вводить?
0
1365 / 510 / 70
Регистрация: 21.07.2015
Сообщений: 1,289
13.06.2018, 16:34 4
Потому что st ничем не инициализируется и содержит мусор из памяти.
C++
1
2
Abiturient st;
memset(&st, 0, sizeof(st));
1
Модератор
Эксперт С++
12118 / 9786 / 5913
Регистрация: 18.12.2011
Сообщений: 26,260
13.06.2018, 18:24 5
Цитата Сообщение от VikkyLand Посмотреть сообщение
впервые слышу об этом
Это азбучная истина: в Си строка - это текстовый массив, у которого в конце записан ноль
(не буква ноль '0', а число ноль 0, или, что то же самое, символ '\0').
1
1365 / 510 / 70
Регистрация: 21.07.2015
Сообщений: 1,289
13.06.2018, 18:56 6
Цитата Сообщение от zss Посмотреть сообщение
В конце текста добавлять терминальный ноль.
Это как раз делает operator >> (вопрос безопасности массивов опустим). Мусор - это "остаток" между терминальным нулем и границей массива.
0
Модератор
Эксперт С++
12118 / 9786 / 5913
Регистрация: 18.12.2011
Сообщений: 26,260
13.06.2018, 19:38 7
Цитата Сообщение от shmkv Посмотреть сообщение
Это как раз делает operator >>
Записано было так:
Цитата Сообщение от VikkyLand Посмотреть сообщение
fout.write((char*)&st, sizeof(st));
Соответственно, при чтении конец строки не будет найден
0
1365 / 510 / 70
Регистрация: 21.07.2015
Сообщений: 1,289
13.06.2018, 19:52 8
Цитата Сообщение от zss Посмотреть сообщение
Соответственно, при чтении конец строки не будет найден
Что значит "не будет найдет"? read заполнит структуру теми же данными, что записал write.
0
Модератор
Эксперт С++
12118 / 9786 / 5913
Регистрация: 18.12.2011
Сообщений: 26,260
13.06.2018, 21:17 9
Цитата Сообщение от shmkv Посмотреть сообщение
read заполнит
Так если-бы ТС читал с помощью read.
Ан нет:
Цитата Сообщение от VikkyLand Посмотреть сообщение
std::getline(fin, str);
0
1365 / 510 / 70
Регистрация: 21.07.2015
Сообщений: 1,289
13.06.2018, 21:28 10
Цитата Сообщение от zss Посмотреть сообщение
Так если-бы ТС читал с помощью read.
Там выше чтение через read, а этот код вообще неясно для каких целей.

Добавлено через 1 минуту
Цитата Сообщение от VikkyLand Посмотреть сообщение
fin.open("data2.txt", ios::app);
И я сильно сомневаюсь, что ios::app тут уместен вообще.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2018, 21:28
Помогаю со студенческими работами здесь

В файл добавляются ненужные записи
Для того чтобы сохранить какие-то записи в файл я использую TStringList.SaveToFile(file), перед...

Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют четные млад
Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые имеют...

Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них, которые являются простыми числам
Задание: Дан текстовый файл с изображениями целых чисел. В выходной файл поместить те из них,...

Задан текстовый файл f. Переписать в новый файл g все слова, которые начинаются с буквы к
Задан текстовый файл f. Переписать в новый файл g все слова, которые начинаются с буквы к.

Дан файл. Записать в другой файл только те строки, которые начинаются с заданной буквы
Помогите пожалуйста.))Дан файл. Записать в другой файл только те строки, которые начинаются с...

.Напишите программу, создающую и записывающих в файл ЧС для таких слов текста Pippi.txt, которые начинаются не на буквы ф,р,у
Я пыталась что-то сделать, но ничего не вышло))) просто молю о помощи)) задачи на зачете нужны) ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru