0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
1

Почему не записывается строка в файл?

02.12.2017, 17:10. Показов 1913. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как мне закодированную строку записать в файл? Подскажите, пожалуйста. В этой строке
C++
1
bool result = fputs(str, file); // и записываем ее в файл
выдает ошибку.
И как мне избавиться от предупреждения "_CRT_SECURE_NO_WARNINGS"?? Уже пробовала подключать таким образом
C++
1
#define _CRT_SECURE_NO_WARNINGS
и в свойствах прописывать, но что-то не помогло..
скрины прикрепила.
Заранее благодарю за помощь)

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
#include "stdafx.h"
 
#include <iostream>
#include <locale.h>
#include <string>
#include <fstream>
 
using namespace std;
 
// Run Length Encoding (RLE) data compression algorithm 
 
string encode(string str)
{
    
    string encoding = "";
    int count;
 
    for (int i = 0; str[i]; i++)
    {
        count = 1;
        while (str[i] == str[i + 1])
            count++, i++;
 
        
        encoding += to_string(count) + str[i];
    }
 
    return encoding;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    char buff[50];
    ifstream fin("string.txt"); // на чтение
    //ofstream fout("encode.txt"); //на запись
    FILE * file = fopen("string2.txt", "w");
    
 
    string str = "";
 
 
    //cout << "Введите строку, которую нужно сжать:" << endl;
    //cin >> str;
 
    fin >> buff;
    cout << "Исходная строка:" << endl;
    cout << buff << endl;
    cout << "Сжатая строка:" << endl;
    cout << encode(buff);
 
    fin.getline(buff, 50);
    fin.close();
    cout << buff << endl;
    str = encode(buff);
 
    //ofstream fout("string2.txt"); // на запись
    //fout << str;
    //fout.close();
 
    if (file) // если есть доступ к файлу,
    {
        
        bool result = fputs(str, file); // и записываем ее в файл
        if (!result) // если запись произошла успешно
            cout << "Строка в файл успешно записана!" << endl; // выводим сообщение
    }
    else
        cout << "Нет доступа к файлу!" << endl;
    fclose(file);
 
 
    cout << endl;
    system("pause");
 
    return 0;
    
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2017, 17:10
Ответы с готовыми решениями:

Почему текстовая строка записывается с пробелами, а читается без?
Всем здравствуйте. std::ifstream in; std::ofstream out; void Button1_Click(void) { // Запись...

Не записывается строка в файл
Не записывается строка в файл в чем может быть причина ? fstream f(&quot;work_mem.txt&quot;, ios::in |...

Не записывается в файл строка
Не могу понять, в чем проблема? Чтение из файла проходит успешно, а вот запись - нет. Мне нужно не...

Строка не записывается в файл, если в ней присутствуют пробелы
Делаю записную книгу на с++ в консоли (Code::Block) Все отлично работает если в каждую переменную...

9
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
02.12.2017, 17:18 2
C++
1
fputs(str.c_str(), file); // fputs - функция с языка С, принимает char* и FILE*
C++
1
2
#define _CRT_SECURE_NO_WARNINGS
/* пишется перед всеми инклюдами в самом начале */
1
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
02.12.2017, 17:22 3
anapshy, при использовании стандартного шаблона с прекомпилированными заголовками, его надо помещать как минимум в stdafx.h до stdio.h
2
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
02.12.2017, 18:58  [ТС] 4
так и делаю, но все равно ошибка
C++
1
C4005   '_CRT_SECURE_NO_WARNINGS': macro redefinition
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
02.12.2017, 18:59 5
amastudent, дважды написали где то. Достаточно одного.
1
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
02.12.2017, 19:15  [ТС] 6
пишет, что доступа к файлу нет.
Почему?

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
int main()
{
    setlocale(LC_ALL, "Rus");
    char buff[50];
    ifstream fin("string.txt"); // на чтение
    //ofstream fout("encode.txt"); //на запись
    char * fileName = "C:\\MY DISK\Study\5th semestr\Theory of information\LW Theory of information\LW1\LW1\string2.txt"; // Путь к файлу для записи
    FILE * file = fopen(fileName, "w");
    
 
    string str = "";
 
 
    //cout << "Введите строку, которую нужно сжать:" << endl;
    //cin >> str;
 
    fin >> buff;
    cout << "Исходная строка:" << endl;
    cout << buff << endl;
    cout << "Сжатая строка:" << endl;
    cout << encode(buff);
 
    fin.getline(buff, 50);
    fin.close();
    cout << buff << endl;
    str = encode(buff);
 
    //ofstream fout("string2.txt"); // на запись
    //fout << str;
    //fout.close();
 
    if (file) // если есть доступ к файлу,
    {
        
        bool result = fputs(str.c_str(), file); // и записываем ее в файл
        if (!result) // если запись произошла успешно
            cout << "Строка в файл успешно записана!" << endl; // выводим сообщение
    }
    else
        cout << "Нет доступа к файлу!" << endl;
    fclose(file);
 
 
    cout << endl;
    system("pause");
 
    return 0;
    
}
Миниатюры
Почему не записывается строка в файл?  
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
02.12.2017, 19:22 7
Попробуйте так.

C++
1
 char * fileName = "C:\\MY DISK\\Study\\5th semestr\\Theory of information\\LW Theory of information\\LW1\\LW1\\string2.txt"; // Путь к файлу для записи
1
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.12.2017, 19:23 8
amastudent, слеши в пути файла везде продублируй.
1
0 / 0 / 0
Регистрация: 10.05.2017
Сообщений: 51
02.12.2017, 19:35  [ТС] 9
С этим разобралась, спасибо))
Но по прежнему строка не записывается в файл. Есть подозрение, что str просто пуста.
C++
1
str = encode(buff);
- такой расклад имеет место быть или он бессмысленен? Я не могу найти ошибку((
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
02.12.2017, 20:02 10
Лучший ответ Сообщение было отмечено amastudent как решение

Решение

amastudent, а что должно быть второй строкой в buff? Сначала вы через cin >> fin считываете буфер, потом выводите его на экран, потом делаете fin.getline, который должен бы по идее считать вторую строку в файле. Если так и задумывалось, то тут есть тоже косяк, так как cin >> fin оставляет символ-разделитель в потоке, а fin.getline считывает этот разделитель и удовлетворяется им. Если вы хотите в fin.getline считать вторую строку файла, то удалите перед ним символ.

C++
1
2
fin.get();
fin.getline(buff, 50);
1
02.12.2017, 20:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2017, 20:02
Помогаю со студенческими работами здесь

Почему в файл значение дублируется (записывается дважды)?
Суть: при чтении с файла f записываю данные(числа) в массив a. Потом значения этого массива по...

Не могу понять почему в файл OUTPUT.TXT ничего не записывается
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { int n,i;...

Почему на экран выводится 5 элементов массива, а в файл записывается 1 элемент (последний)
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;fstream&gt; using namespace...

Почему не записывается символьный массив в классе?
в отмеченном месте выдает ошибку доступа для записи в первом случае, во втором все нормально,...


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

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

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