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

Выбор файла для открытия

22.08.2014, 09:23. Показов 7352. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, мне нужна помощь с программой, почти всё сделано, только осталось прикрутить выбор файла пользователем для редактирования(прога редактирует текст). Я пытался сам прикрутить, но видимо что-то не выходит, ошибку в упор не вижу в силу не знания тонкостей языка. Помогите пожалуйста, вот код:
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
#include "stdafx.h"
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<locale.h>
#include <fstream>
 
using namespace std;
 
char s[10000], t[10000], r[10000], key;
int len, last, sz, sz2, beg;
bool sl, boo, pr;
string f;
char file_name[100];
//вывод меню
void Menu()
{
    system("cls");
    cout << "Меню:" << "\n";
    cout << "1. Сохранить в" << endl;
    cout << "2. Редактировать" << endl;
    cout << "3. Выход" << endl;
    cout << "4. Введите имя файла: " << endl;
}
 
//определяет, является ли символ знаком препинания
bool prep(char c)
{
    if (c == ',' || c == '.' || c == '!' || c == '?')
        return 1;
    return 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian"); //установка русского языка
    while (1)
    {
        Menu(); //вывод меню
        key =_getch(); //считываем введенный символ
        switch (key)
        {
        case'1': //сохранить в
            cout << "Введите имя выходного файла:";
            cin >> f; //запоминаем в переменную имя выходного файла
            break;
        case '2':{ //редактировать
                     //cout << f << endl;
                     ifstream in(file_name); //открываем файл на чтение
                     ofstream out(f.c_str()); //открываем файл на запись
                     while (in.getline(s, sizeof(s))) //пока считываем очередную строку
                     {
                         len = strlen(s); //длина
                         s[len++] = ' '; //добавляем пробел в конец
                         beg = -2; //начало последнего обработанного слова
                         last = -1; //конец предпоследнего обработанного слова
                         for (int i = 0; i < len; i++)
                         if (!prep(s[i]) && s[i] != ' ') //если символ принадлежит слову
                         {
                             sl = 1; //слово еще не выведено
                             if (!(sz > 1 && s[i] == t[sz - 1] && s[i] == t[sz - 2])) //избавляемся от трех и более последовательных букв
                                 t[sz++] = s[i]; //записываем слово в отдельную строку
                             if (i == 0 || (prep(s[i - 1]) || s[i - 1] == ' '))
                                 beg = i; //запоминаем начало слова
                         }
                         else
                         {
                             if (sl) //если слово еще не выведено
                             {
                                 boo = 0;
                                 //если слово равно предыдущему, то запомним это
                                 if (sz2 == sz)
                                 {
                                     for (int j = 0; j < sz; j++)
                                     if (r[j] != t[j])
                                         boo = 1;
                                 }
                                 else
                                     boo = 1;
                                 if (boo || pr) //если слово не равно предыдущему или между ними был знак препинания
                                 {
                                     for (int j = last + 1; j < beg; j++)
                                         out << s[j]; //выводим пробелы между словами
                                     for (int j = 0; j < sz; j++)
                                         out << t[j]; //выводим само слово
                                 }
                                 sl = 0; //слово выведено
                                 for (int j = 0; j < sz; j++)
                                     r[j] = t[j]; //запоминаем слово как предыдущее
                                 sz2 = sz;
                                 sz = 0;
                                 pr = 0; //знака препинания последним не было
                                 last = i - 1; //слово только что закончилось
                                 beg = -2;
                             }
                             if (prep(s[i])) //если знак препинания
                             {
                                 pr = 1; //знак препинания был
                                 last = 1e9; //чтобы не выводить лишние пробелы
                                 out << s[i] << " "; //выводим знак препинания и пробел
                             }
                         }
                         out << endl; //перевод строки
                     }
 
                     in.close(); //закрываем файл на чтение
                     out.close(); //закрываем файл на запись
 
                     break;
        }
        case '3': {return 0; } //завершаем работу//выход
        case'4':{
                    cout << "Введите имя редактируемого файла:";
                    cin >> file_name; 
        }
 
            
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2014, 09:23
Ответы с готовыми решениями:

Ввод имени для открытия файла
Добрый день, не совсем понимаю, почему у меня выводит, что файл не открыт, хотя он существует 100%,...

Пользовательская функция для создания/открытия файла
void CreatOpenFile(Name &amp;NameFile, int &amp;flag) // Создание,открытие файла базы данных { char...

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

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

18
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 09:32 2

Не по теме:

Цитата Сообщение от Glebordan Посмотреть сообщение
C++
1
2
3
4
5
6
7
//определяет, является ли символ знаком препинания
bool prep(char c)
{
    if (c == ',' || c == '.' || c == '!' || c == '?')
        return 1;
    return 0;
}
А чем плоха библиотечная функция ispunct() (семейство функций из заголовочного файла cctype)?



Добавлено через 3 минуты
Цитата Сообщение от Glebordan Посмотреть сообщение
C++
1
cin >> f; //запоминаем в переменную имя выходного файла
попробуй вместо этого так (на тот случай, если в имени файла будут пробелы):
C++
1
getline(cin, f);   // функция считывает строку типа string целиком (включая пробелы)
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 09:38  [ТС] 3
gru74ik, Спасибо, а как выбрать редактируемый файл?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 09:53 4
Цитата Сообщение от Glebordan Посмотреть сообщение
ifstream in(file_name); //открываем файл на чтение
Не откроется. У тебя это просто массив типа char, пока что никак не связанный с именем файла, введённым пользователем (строка string f).

Не по теме:

И вообще, зачем ты используешь в качестве строк в одной программе и массивы char и строки типа string? Если уж используешь string, так и используй его везде. Доступ к отдельным символам в строках типа string вполне себе возможен в нотации массивов. То есть, например:

C++
1
2
3
4
string myString;
cout << "Please enter name of file you want to open: "
getline(cin, myString);
cout << myString[0];  // будет выведен на экран первый символ строки myString



Добавлено через 7 минут
Я работать, начальник приехал. Позже загляну, подскажу может как быть.
А пока вот можешь посмотреть для примера, как тут работа с файлом организована.
1
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 10:14  [ТС] 5
Хорошо, обязательно посмотрю, я убрал символьный массив и теперь у меня две строки(одна-имя редактируемого файла, вторая- имя файла куда сохраняется редактированный текст).

Добавлено через 12 минут
Как я понял надо создать переменную типа ifstream. Код будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <fstream>
using namespase std;
int main()
{
string file_name_to_open;
ifsream jin;
cout<<"введите имя редактируемого файла";
getline(cin, file_name_to_open);
jin.open(buf)
}
Я правильно вас понял?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 11:02 6
Цитата Сообщение от Glebordan Посмотреть сообщение
надо создать переменную типа ifstream
Объект типа ifstream. Для чтения информации из файла. Вы же пользуетесь библиотечным объектом cin для чтения из потока? А тут у вас будет свой объект (назовите его как хотите, я назвал fin), только читает он не из потока, а из файла.

А вот для записи в файл, надо будет создавать уже объект типа ofstream. Он строится по аналогии с cout. То есть, если cout выводит информацию в поток, то Ваш собственный объект (скажем, fout) выводит информацию в файл.

Там только надо в учебниках инфу пошукать, как сделать правильно, потому что, если мне не изменяет память, при открытии файла он (файл) сбрасывается в ноль (затирается).

Цитата Сообщение от Glebordan Посмотреть сообщение
Я правильно вас понял?
Наверное, как-то так:
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
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
#include <string>       // для строк класса string
#include <fstream>      // для чтения из файла
 
int main()
{
    using namespase std::string;
    using namespase std::cout;
    using namespase std::cin;
    
    SetConsoleCP(1251);       // для отображения в консоли русского языка
    SetConsoleOutputCP(1251); // для отображения в консоли русского языка
    
    string file_name_to_open;
    cout << "Введите имя редактируемого файла: "
    getline(cin, file_name_to_open);  
      
    //======================= Чтение данных из файла =======================
 
    ifstream fin;             // создание объекта fin типа ifstream    
    fin.open(file_name_to_open);    // ассоциирование создание объекта fin с файлом
                                    
    fin >> какой-то объект (читать из файла строку, например)
    //======================================================================
    return 0;
}
Добавлено через 3 минуты
upd. Я прогнал. Вы были правы насчёт строки в стиле С. Она всё-таки нужна:

Цитата Сообщение от Стивен Прата
Прата С. - Язык программирования С++. Лекции и упражнения (2013, 6-е издание):

Обратите внимание, что метод open() требует в качестве аргумента строки в
стиле С. Это может быть строковый литерал или строка, сохраненная в символьном
массиве.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
22.08.2014, 11:13 7
Цитата Сообщение от gru74ik Посмотреть сообщение
Я прогнал. Вы были правы насчёт строки в стиле С. Она всё-таки нужна
Не обязательно. Можно просто преобразовать.
C++
1
fin.open(file_name_to_open.c_str());
1
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 11:48  [ТС] 8
Хмм...не выходит что-то....
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
125
#include "stdafx.h"
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<locale.h>
#include <fstream>
 
using namespace std;
 
char s[10000], t[10000], r[10000], key;
int len, last, sz, sz2, beg;
bool sl, boo, pr;
string f , file_name;
//вывод меню
void Menu()
{
    system("cls");
    cout << "Меню:" << "\n";
    cout << "1. Сохранить в" << endl;
    cout << "2. Редактировать" << endl;
    cout << "3. Выход" << endl;
    cout << "4. Введите имя файла: " << endl;
}
 
//определяет, является ли символ знаком препинания
bool prep(char c)
{
    if (c == ',' || c == '.' || c == '!' || c == '?')
        return 1;
    return 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian"); //установка русского языка
    while (1)
    {
        Menu(); //вывод меню
        key =_getch(); //считываем введенный символ
        switch (key)
        {
        case'1': //сохранить в
            cout << "Введите имя выходного файла:";
            getline(cin, f); //запоминаем в переменную имя выходного файла
            break;
        case '2':{ //редактировать
                     //cout << f << endl;
                     ifstream fin;
                     fin.open(file_name.c_str()); //открываем файл на чтение
                     ofstream out(f.c_str()); //открываем файл на запись
                     while (in.getline(s, sizeof(s))) //пока считываем очередную строку
                     {
                         len = strlen(s); //длина
                         s[len++] = ' '; //добавляем пробел в конец
                         beg = -2; //начало последнего обработанного слова
                         last = -1; //конец предпоследнего обработанного слова
                         for (int i = 0; i < len; i++)
                         if (!prep(s[i]) && s[i] != ' ') //если символ принадлежит слову
                         {
                             sl = 1; //слово еще не выведено
                             if (!(sz > 1 && s[i] == t[sz - 1] && s[i] == t[sz - 2])) //избавляемся от трех и более последовательных букв
                                 t[sz++] = s[i]; //записываем слово в отдельную строку
                             if (i == 0 || (prep(s[i - 1]) || s[i - 1] == ' '))
                                 beg = i; //запоминаем начало слова
                         }
                         else
                         {
                             if (sl) //если слово еще не выведено
                             {
                                 boo = 0;
                                 //если слово равно предыдущему, то запомним это
                                 if (sz2 == sz)
                                 {
                                     for (int j = 0; j < sz; j++)
                                     if (r[j] != t[j])
                                         boo = 1;
                                 }
                                 else
                                     boo = 1;
                                 if (boo || pr) //если слово не равно предыдущему или между ними был знак препинания
                                 {
                                     for (int j = last + 1; j < beg; j++)
                                         out << s[j]; //выводим пробелы между словами
                                     for (int j = 0; j < sz; j++)
                                         out << t[j]; //выводим само слово
                                 }
                                 sl = 0; //слово выведено
                                 for (int j = 0; j < sz; j++)
                                     r[j] = t[j]; //запоминаем слово как предыдущее
                                 sz2 = sz;
                                 sz = 0;
                                 pr = 0; //знака препинания последним не было
                                 last = i - 1; //слово только что закончилось
                                 beg = -2;
                             }
                             if (prep(s[i])) //если знак препинания
                             {
                                 pr = 1; //знак препинания был
                                 last = 1e9; //чтобы не выводить лишние пробелы
                                 out << s[i] << " "; //выводим знак препинания и пробел
                             }
                         }
                         out << endl; //перевод строки
                     }
 
                     in.close(); //закрываем файл на чтение
                     out.close(); //закрываем файл на запись
 
                     break;
        }
        case '3': {return 0; } //завершаем работу//выход
        case'4':{
                    cout << "Введите имя редактируемого файла:";
                    getline(cin, file_name);
                    
 
        }
 
            
        }
    }
}
0
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
22.08.2014, 12:18 9
что пишет?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 12:53 10
Лучший ответ Сообщение было отмечено Glebordan как решение

Решение

Строчки 51-53 исправь на это:
C++
1
2
3
4
 ifstream fin;                  // создание объекта fin типа ifstream
 fin.open(file_name.c_str());   // открываем файл на чтение
 ofstream fout;                 // создание объекта fout типа ofstream
 fout.open(f.c_str());          // открываем файл на запись
И заголовочные файлы не забудь:
C++
1
2
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
Добавлено через 14 минут
Вместо
Цитата Сообщение от Glebordan Посмотреть сообщение
C++
1
while (in.getline(s, sizeof(s))) //пока считываем очередную строку
кажется, должно быть так:
C++
1
while (fin.getline(s, sizeof(s))) //пока считываем очередную строку
1
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 12:57  [ТС] 11
Fallenworld, Да так-то компилируется, но не отзывается
gru74ik, Спасибо, сейчас попробую
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 13:00 12
И дальше в коде имена не путай. А то у тебя то fin и fout, то in и out.
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 13:01  [ТС] 13
Теперь почему-то на операторы вывода ругается:
C++
1
2
3
4
5
6
7
if (boo || pr) //если слово не равно предыдущему или между ними был знак препинания
                                 {
                                     for (int j = last + 1; j < beg; j++)
                                         out << s[j]; //выводим пробелы между словами
                                     for (int j = 0; j < sz; j++)
                                         out << t[j]; //выводим само слово
                                 }
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 13:03 14
C++
1
2
3
4
5
6
7
if (boo || pr) //если слово не равно предыдущему или между ними был знак препинания
                                 {
                                     for (int j = last + 1; j < beg; j++)
                                         fout << s[j]; //выводим пробелы между словами
                                     for (int j = 0; j < sz; j++)
                                         fout << t[j]; //выводим само слово
                                 }
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 13:05  [ТС] 15
Да, я это исправил,только не помогло это, он не открывает файл который я ему указываю...
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 13:07 16
Цитата Сообщение от Glebordan Посмотреть сообщение
он не открывает файл который я ему указываю..
Заголовочные файлы не забыл?
C++
1
2
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 13:27  [ТС] 17
Нет, не забыл, а не может быть так, что файл с текстом должен находиться в папке проекта? Но думаю ошибка не в этом, я всегда пишу полное имя файла...

Добавлено через 18 минут
У меня сейчас вот так:
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
125
126
127
#include "stdafx.h"
#include<cstdio>
#include<cstring>
#include<string>
#include <fstream>      // для чтения из файла
#include <ostream> 
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<locale.h>
#include <fstream>
 
using namespace std;
 
char s[10000], t[10000], r[10000], key;
int len, last, sz, sz2, beg;
bool sl, boo, pr;
string f , file_name;
//вывод меню
void Menu()
{
    system("cls");
    cout << "Меню:" << "\n";
    cout << "1. Сохранить в" << endl;
    cout << "2. Редактировать" << endl;
    cout << "3. Выход" << endl;
    
}
 
//определяет, является ли символ знаком препинания
bool prep(char c)
{
    if (c == ',' || c == '.' || c == '!' || c == '?')
        return 1;
    return 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian"); //установка русского языка
    while (1)
    {
        Menu(); //вывод меню
        key =_getch(); //считываем введенный символ
        switch (key)
        {
        case'1': //сохранить в
            cout << "Введите имя выходного файла:";
            getline(cin, f); //запоминаем в переменную имя выходного файла
            break;
        case '2':{ 
                     //cout << f << endl;
                     cout << "Введите имя редактируемого файла:";
                     getline(cin, file_name);
                     ifstream fin;                  // создание объекта fin типа ifstream
                     fin.open(file_name.c_str());   // открываем файл на чтение
                     ofstream fout;                 // создание объекта fout типа ofstream
                     fout.open(f.c_str());          // открываем файл на запись
                     while (fin.getline(s, sizeof(s))) //пока считываем очередную строку
                     {
                         len = strlen(s); //длина
                         s[len++] = ' '; //добавляем пробел в конец
                         beg = -2; //начало последнего обработанного слова
                         last = -1; //конец предпоследнего обработанного слова
                         for (int i = 0; i < len; i++)
                         if (!prep(s[i]) && s[i] != ' ') //если символ принадлежит слову
                         {
                             sl = 1; //слово еще не выведено
                             if (!(sz > 1 && s[i] == t[sz - 1] && s[i] == t[sz - 2])) //избавляемся от трех и более последовательных букв
                                 t[sz++] = s[i]; //записываем слово в отдельную строку
                             if (i == 0 || (prep(s[i - 1]) || s[i - 1] == ' '))
                                 beg = i; //запоминаем начало слова
                         }
                         else
                         {
                             if (sl) //если слово еще не выведено
                             {
                                 boo = 0;
                                 //если слово равно предыдущему, то запомним это
                                 if (sz2 == sz)
                                 {
                                     for (int j = 0; j < sz; j++)
                                     if (r[j] != t[j])
                                         boo = 1;
                                 }
                                 else
                                     boo = 1;
                                 if (boo || pr) //если слово не равно предыдущему или между ними был знак препинания
                                 {
                                     for (int j = last + 1; j < beg; j++)
                                         fout << s[j]; //выводим пробелы между словами
                                     for (int j = 0; j < sz; j++)
                                         fout << t[j]; //выводим само слово
                                 }
                                 sl = 0; //слово выведено
                                 for (int j = 0; j < sz; j++)
                                     r[j] = t[j]; //запоминаем слово как предыдущее
                                 sz2 = sz;
                                 sz = 0;
                                 pr = 0; //знака препинания последним не было
                                 last = i - 1; //слово только что закончилось
                                 beg = -2;
                             }
                             if (prep(s[i])) //если знак препинания
                             {
                                 pr = 1; //знак препинания был
                                 last = 1e9; //чтобы не выводить лишние пробелы
                                 fout << s[i] << " "; //выводим знак препинания и пробел
                             }
                         }
                         fout << endl; //перевод строки
                     }
 
                     fin.close(); //закрываем файл на чтение
                     fout.close(); //закрываем файл на запись
 
                     break;
        }
        case '3': {return 0; } //завершаем работу//выход
        
                    
 
        }
 
            
        }
    }
Путь к тексту ввожу- D:\\D.txt -, а вот сохранять файлы он не хочет, хотя и можно ввести имя файла....
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
22.08.2014, 14:37 18
У меня работает:

Кликните здесь для просмотра всего текста
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
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
#include <string>       // для строк класса string
#include <ostream>      // для вывода в файл
#include <fstream>      // для чтения из файла
#include <limits>       // для cin.ignore(numeric_limits<streamsize>::max(), '\n');
 
int main()
{
    using namespace std;
 
    SetConsoleCP(1251);       // для отображения в консоли русского языка
    SetConsoleOutputCP(1251); // для отображения в консоли русского языка
 
    string fileName;
    string fileContent;
 
    cout << "\nЖелаете сохранить введённые Вами данные в файл? (да/нет): ";
    char userAnswer;  // переменная для ответа пользователя
    cin >> userAnswer;   // записываем ответ пользователя
    cin.ignore(1, '\n');
    cin.clear();    // очистка буфера после ввода
 
    // варианта утвердительного ответа, начинающиеся
    // на соответствующие символы:
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВведённые Вами данные будут сохранены в файл.\n"
                "Введите имя файла: ";
        getline (cin, fileName);
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin.clear();    // очистка буфера после ввода
 
        cout << "Введите текст, который будет записан в файл:\n";
        getline (cin, fileContent);
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin.clear();    // очистка буфера после ввода
 
        ofstream fout;          // создание объекта fout типа ofstream
        fout.open(fileName.c_str()); // ассоциирование объекта c файлом
        fout << fileContent;
        fout.close ();  // закрытие соединения вывода с файлом
        cout << "\nДанные были успешно сохранены." << endl;
    }
 
    else
    {
        cout << "\nВы отказались от сохранения данных в "
                 "текстовый файл. Программа будет завершена." << endl;
 
        //--------- Специальный блок для красоты ---------
        //================================================
        // С небольшой задержкой будут выведены 10 точек
        // одна за другой, как будто программа думает:
        cout << endl;
        for (int i=0; i<20; i++)
        {
        Sleep(100);
        cout << "*";
        }
        cout << endl;
        //------------------------------------------------
 
        return 0;   // успешное завершение программы
    }
 
    cout << endl << endl;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.clear();    // очистка буфера после ввода
 
    cout << "Желаете вывести на экран введённые Вами данные\n"
            "из файла " << fileName <<" (да/нет): ";
    cin >> userAnswer;   // записываем ответ пользователя
 
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.clear();    // очистка буфера после ввода
 
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВы сохранили следующие данные в файле "
             << fileName <<": " <<endl;
 
        ifstream fin;               // создание объекта fin типа ifstream
        fin.open(fileName.c_str()); // ассоциирование объекта c файлом
 
        string wroteFromFile;
        getline (fin, wroteFromFile); // читаем из файла
        cout << endl << wroteFromFile << endl; // выводим на экран, что прочитали
        fin.close ();   // закрытие соединения ввода с файлом
    }
 
    else
    {
        cout << "\nВы отказались от вывода данных на "
                "экран. Программа будет завершена.";
                
        //--------- Специальный блок для красоты ---------
        //================================================
        // С небольшой задержкой будут выведены 10 точек
        // одна за другой, как будто программа думает:
        cout << endl;
        for (int i=0; i<20; i++)
        {
        Sleep(100);
        cout << "*";
        }
        cout << endl;
        //------------------------------------------------
    }
 
    return 0;   // успешное завершение программы
}


Пишет текст в файл. Потом выводит записанный текст из файла.
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
22.08.2014, 16:16  [ТС] 19
gru74ik, надеюсь вы меня поймёте, кажется проблема вот в чём, в первом пункте я ввожу имя файла в который я сохраняю редактированный текст. Вооооот....а я ведь прикрутил выбор файла из которого производится чтение во второй пункт, это ведь ошибка?

Добавлено через 2 минуты
Дааааа, я был прав, спасибо вам большое, всё исправно работает, просто код корявый
0
22.08.2014, 16:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2014, 16:16
Помогаю со студенческими работами здесь

Выбор программы для открытия файла
Пишу программку которая работает с БД. В БД хранятся ссылки на всякие разные файлы(разные...

Выбор xml файла для открытия
Знающие люди, помогите. Пишу программу для тестов. Путь к XML файлу (самому тесту) в ней...

Выбор файла и переключение на другую активити для его открытия
Подскажите советом или кодом. Написал файловый менеджер для просмотра файлов на устройстве....

Какими средствами реализовать выбор файла для открытия или сохранения
не могу найти что писать в коде когда пользователь нажимает на кнопку &quot;открыть&quot; и он может выбрать...


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

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

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