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

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

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

Задание имени файла пользователем при чтении и записи - C++

30.07.2015, 20:39. Просмотров 427. Ответов 11
Метки нет (Все метки)

Программа должна осуществлять запись в файл или чтение из файла (по выбору пользователя) целых чисел. Пока я написала вот такой код:
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main() {
    int A,i, n[3];
    
    cout<<"Do you want to read or to write the file? Put 1 or 2.";
    cin>>A;
    
    if (A == 1) {
    ofstream fout("/Users/Margarita/XCode/Full_As1/user_file.txt");
    for (i=0; i<3; i++) {
        cin>>n[i];
        fout<<n[i];
    }
        fout.close();
    }
    
    
    if (A == 2) {
    string data;
    ifstream fin(("/Users/Margarita/XCode/Full_As1/user_file.txt"));
     while (!fin.eof())
     {
         getline (fin,data);
         cout<<data<<endl;
     }
        fin.close();
    }
    return 0;
}
Также к программе предъявляются дополнительные требования, одно из которых - пользователь должен сам вводить имя файла. И с этим никак не могу разобраться. Подскажите, пожалуйста, как это можно реализовать.
P.S. Насколько я понимаю, по идее путь к файлу указывать не обязательно - он по умолчанию лежит в том же месте, где программа. Но по факту, если убираю путь, то ничего не работает. Почему так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2015, 20:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задание имени файла пользователем при чтении и записи (C++):

Ошибки при записи и чтении из файла - C++
double calc(int n, double sum, int a, int b, double p, double f) { if(n == 0) return sum; else{ sum += p...

Выход при неудачном чтении/записи файла - C++
Как правильнее делать? void f() { if ((fl = fopen(&quot;name&quot;, &quot;mode&quot;)) == NULL) { cout &lt;&lt; &quot;Error! &lt;&lt; endl&quot;; exit(1); } ...

Ошибка при чтении/записи из бинарного файла - C++
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка. Сделать проще уже некуда, в чем проблема? ...

Абракадабра при записи в файл и при чтении из него кириллицы - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { ofstream f(&quot;text.dat&quot;); f &lt;&lt; &quot;Тест&quot;; ...

Нехватка памяти при чтении/записи файлов - C++
Всем привет! Возникла проблема при работе программы, которая должна открывать текстовый файл, читать его, кодировать и записывать в...

Ошибка при записи или чтении в бинарный файл - C++
Есть такие вот типы данных: struct Nomer { int n, tsena1Deni; string klass; int kMest, kZaselenii; bool svoboden; Nomer...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.07.2015, 21:59 #2
Цитата Сообщение от margarita_dq Посмотреть сообщение
он по умолчанию лежит в том же месте, где программа.
Если запуск из среды, то - в папке проекта. Если запуск непосредственно .exe, то - рядом с ним.

Добавлено через 5 минут
Цитата Сообщение от margarita_dq Посмотреть сообщение
Подскажите, пожалуйста, как это можно реализовать.
Как-то, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    cout<<"Do you want to read or to write the file? Put 1 or 2.";
    (cin>>A).get();
    
    string filename;
    
    if (A == 1) {
    getline(cin, filename);
    ofstream fout(filename.c_str());
    for (i=0; i<3; i++) {
        cin>>n[i];
        fout<<n[i];
    }
        fout.close();
    }
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
30.07.2015, 22:03 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 cout<<"Do you want to read or to write the file? Put 1 or 2.";
    (cin>>A).get();
    
    string filename;
    
    if (A == 1) {
    getline(cin, filename);
    ofstream fout(filename);//можно и так
    for (i=0; i<3; i++) {
        cin>>n[i];
        fout<<n[i];
    }
        fout.close();
    }
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.07.2015, 22:04 #4
И открытие файла для чтения всегда проверять нужно (если выбрать сразу 2, то файла ещё нет).
C++
1
2
3
4
5
6
7
8
if (A == 2) {
    ifstream fin(filename.c_str());
    if (!fin)
    {
       cout << "Error!" << endl;
       return 0;
    }
    string data;
kuza84
-4 / 23 / 4
Регистрация: 25.04.2013
Сообщений: 195
30.07.2015, 22:05 #5
Цитата Сообщение от margarita_dq Посмотреть сообщение
Также к программе предъявляются дополнительные требования, одно из которых - пользователь должен сам вводить имя файла. И с этим никак не могу разобраться.
Создаешь переменную типа стринг, в нее через консоль пользователь вводит имя файла в текущей папки исполняемого файла или пишешь путь к файлу.
C++
1
2
3
4
5
6
    ....
    string ch;
    cin>>ch;
    fstream f; 
    f.open(ch, ios::out);
    ....
margarita_dq
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 13
31.07.2015, 11:24  [ТС] #6
Ни вариант ыфырф1992, ни вариант lss не работает. Файл не создается, как и в случае просто указания имени в коде без пути. Не понимаю, почему.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 12:21 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
margarita_dq, ты вводишь в формате fName.txt?

Добавлено через 2 минуты
Цитата Сообщение от lss Посмотреть сообщение
И открытие файла для чтения всегда проверять нужно (если выбрать сразу 2, то файла ещё нет)
это тоже учитывай

Добавлено через 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
#include <iostream>
#include <fstream>
#include<string>
using namespace std;
 
int main() {
    int A,i, n[3];
    
    cout<<"Do you want to read or to write the file? Put 1 or 2.\n";
    cin>>A;
    cout<<"Name f\n";
    string fName;
    cin>>fName;
    if (A == 1) {
    ofstream fout(fName);
    for (i=0; i<3; i++) {
        cin>>n[i];
        fout<<n[i];
    }
        fout.close();
    }
    
    
    if (A == 2) {
    string data;
    ifstream fin(fName);
    if (!fin)
    {
       cout << "Error!" << endl;
       system("pause");
       return 0;
    }
     while (!fin.eof())
     {
         getline (fin,data);
         cout<<data<<endl;
     }
        fin.close();
    }
    system("pause");
    return 0;
}
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
31.07.2015, 13:46 #8
Цитата Сообщение от margarita_dq Посмотреть сообщение
Файл не создается,
Откуда видишь, что не создаётся?
margarita_dq
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 13
31.07.2015, 14:35  [ТС] #9
Откуда видишь, что не создаётся?
Я добавила в код сообщение об ошибке при отсутствии файла, как вы и посоветовали. Получаю в ответ это сообщение. В папке проекта файла нет.
ыфырф1992, код, который вы прислали, работает корректно у вас?
P.S. Извините, что не нашла, как "обращаться/ссылаться"

Добавлено через 7 минут
ты вводишь в формате fName.txt?
Да.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 15:23 #10
margarita_dq, код вполне корректен. При записи данных в файл если Файла нет он создается(в вашем случае цифра 1). Это логично. У вас есть данные, есть имя файла для записи этих данных, но нет файла значит создадим.

При чтении данных( в ваше случае цифра 2) У вас есть имя файла откуда нужно ЧИТАТЬ данные, но этого файла нет и нелогично программе его создавать. И программа не создает.

Возьмите мой код
Первый запуск программы:
Do you want to read or to write the file? Put 1 or 2
1 (каждая новая строка это нажатие enter) // это вводите вы
Name f
som.txt // это вводите вы
1 // это вводите вы
2 // это вводите вы
3 // это вводите вы
выход

второй запуск программы
Do you want to read or to write the file? Put 1 or 2
2 // это вводите вы
Name f
som.txt // это вводите вы
123 //это вывод программы

C++
1
system("pause");
эта строчка корректна для MS Visual c++

Добавлено через 8 минут
C++
1
system("pause");
если выбивает ошибку на этой строчке(у вас не MS Visual c++)
можете заменить на
C++
1
cin.get();cin.get();
Добавлено через 12 минут
Цитата Сообщение от margarita_dq Посмотреть сообщение
Извините, что не нашла, как "обращаться/ссылаться"
нажмите на ник и он вставиться в ответ

Добавлено через 1 минуту
если первый и второй запуск программы поменять местами вы будете получать ошибку что такого файла нет
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
31.07.2015, 15:39 #11
Цитата Сообщение от margarita_dq Посмотреть сообщение
В папке проекта файла нет.
Т.е., жмёшь, при выборе действий 1, вводишь имя файла (какое?), звершаешь программу, заходишь в папку проекта и там нет файла с таким именем?

Добавлено через 1 минуту
Покажи код, который пробуешь, и скрин ввода имени файла.
margarita_dq
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 13
31.07.2015, 17:20  [ТС] #12
ыфырф1992, lss, всё работает. Не получалось из-за моей невнимательности (в названии файла присутствовала "с" в русской раскладке). Извиняюсь за то, что ввела вас в заблуждение и благодарю за помощь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 17:20
Привет! Вот еще темы с ответами:

Ошибка при вызове метода класса, при чтении из файла - C++
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...

Мусор при чтении файла - C++
При чтений текста из файла программа вставляет букву я на конце Как убрать?

Абракадабра при чтении из файла - C++
Добрый вечер! Имеется файл, в котором записан двумерный символьный массив, представляющий собой схему графа, например такой: 0 A B C D...

фейл при чтении из файла - C++
Вот абсолютно работоспособный код, где чтение и запись выполняются непосредственно в main. #include &lt;iostream&gt; #include &lt;fstream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.07.2015, 17:20
Ответ Создать тему
Опции темы

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