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

Ввести с клавиатуры имя файла и передать его в функцию - C++

Восстановить пароль Регистрация
 
Anya1919
 Аватар для Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
08.10.2016, 00:17     Ввести с клавиатуры имя файла и передать его в функцию #1
Сабж, получаем с клавиатуры имя файла .txt, чтобы далее создать его и выводить туда результат вычислений, надо передать название файла, то есть filename в качестве аргумента в несколько функций и объявить в прототипах, но возникают проблемы с этим, пыталась через указатель на char, вообщем не вышло.
C++
1
2
3
    char filename[40];
    cout << "vvedite imya faila: ";
    cin >> filename;
Помогите пожалуйста, если надо скину весь код целиком.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2016, 00:17     Ввести с клавиатуры имя файла и передать его в функцию
Посмотрите здесь:

C++ Ввести с клавиатуры массив, а потом вывести его на экран
C++ Ввести слово с клавиатуры, а затем перевернуть его
Ввести двумерный массив с клавиатуры и упорядочить его элементы по возрастанию. C++
Ввести массив с клавиатуры и найти количество его элементов C++
C++ Напишите программу, которая приглашает пользователя ввести его имя и фамилию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nd2
1048 / 787 / 267
Регистрация: 29.01.2016
Сообщений: 2,460
08.10.2016, 06:20     Ввести с клавиатуры имя файла и передать его в функцию #2
Цитата Сообщение от Anya1919 Посмотреть сообщение
пыталась через указатель на char, вообщем не вышло.
Что, собственно, не вышло? Покажи как делала, что вводила, как передавала. Тут, вроде бы, проблем быть не должно.
MansMI
1047 / 844 / 205
Регистрация: 08.01.2012
Сообщений: 3,027
08.10.2016, 06:21     Ввести с клавиатуры имя файла и передать его в функцию #3
C++
1
cin.getline(filename,40);
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
08.10.2016, 09:36     Ввести с клавиатуры имя файла и передать его в функцию #4
Anya1919, используйте std::getline из заголовочного файла string:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int main()
{
    std::string filename;
 
    std::cout << "Please, enter your filename: ";
 
    std::getline( std::cin, filename );
 
    std::cout
        << "\nThe name of your file is: "
        << filename;
 
    return 0;
}
Peoples
718 / 378 / 341
Регистрация: 06.02.2016
Сообщений: 1,005
Записей в блоге: 10
Завершенные тесты: 3
08.10.2016, 10:33     Ввести с клавиатуры имя файла и передать его в функцию #5
Я так понимаю,вы хотите что-то типо этого?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void print(string s1) {
    ifstream ff;       // создаём файл 
    ff.open(s1.c_str()); // с помощью c_str() передаём имя файла 
    while(!ff.eof()) {      
        string s2;
        ff>>s2;  // читаем содержимое 
        cout<<s2<<endl;
    }
    ff.close();
 
}
int main() {
    string s;
    cout<<"Enter a filename "<<endl; 
    getline(cin,s);   // вводим имя файла 
    print(s); // вызываем функцию, передавая строку в качестве аргумента 
    return 0;
}
nd2
1048 / 787 / 267
Регистрация: 29.01.2016
Сообщений: 2,460
08.10.2016, 10:39     Ввести с клавиатуры имя файла и передать его в функцию #6
Цитата Сообщение от MansMI Посмотреть сообщение
cin.getline(filename,40);
Цитата Сообщение от gru74ik Посмотреть сообщение
используйте std::getline
Цитата Сообщение от Peoples Посмотреть сообщение
getline(cin,s); // вводим имя файла
Как сговорились... Что, без getline(), прямо, никак не обойтись?
Peoples
718 / 378 / 341
Регистрация: 06.02.2016
Сообщений: 1,005
Записей в блоге: 10
Завершенные тесты: 3
08.10.2016, 10:41     Ввести с клавиатуры имя файла и передать его в функцию #7
nd2, Не запрещено, значит разрешено
Но имя файла скорее всего будет без пробелов, можно и просто cin
Anya1919
 Аватар для Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
08.10.2016, 11:25  [ТС]     Ввести с клавиатуры имя файла и передать его в функцию #8
Цитата Сообщение от Peoples Посмотреть сообщение
nd2, Не запрещено, значит разрешено
Но имя файла скорее всего будет без пробелов, можно и просто cin
Цитата Сообщение от nd2 Посмотреть сообщение
Что, собственно, не вышло? Покажи как делала, что вводила, как передавала. Тут, вроде бы, проблем быть не должно.
Цитата Сообщение от gru74ik Посмотреть сообщение
Anya1919, используйте std::getline из заголовочного файла string:
У меня возникала ошибка, когда я пыталась в мэине присвоить введённое с клавиатуры значение массиву символов и передать его через указатели в функции Sort и Print, пока ждала помощи написала запрос на введение имени файла в каждой из функций, до фикса, но это же неочень, когда 2 раза приходится вводить имя одного и того же файла
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
#include <iostream>
#include <clocale>
#include <fstream>
#include <cstring>
 
using namespace std;
 
float** Create(int);
void Sort(float**, int);
void Input(float**, int);
void Print(float**, int);
void Delete(float**, int);
 
int main()
{
    setlocale(LC_ALL, "");
    int size;
    cout << "Введите размерность матрицы: ";
    cin >> size;
    if (size % 2 == 0)
    {
        cout << "Для сортировки заданным методом матрица должны быть нечётной размерности!" << endl;
        system("pause");
        exit(1);
    }
    float **array = Create(size);
    Input(array, size);
    Print(array, size);
    Sort(array, size);
    Delete(array, size);
    system("pause");
    return 0;
}
 
float** Create(int size)                    //создаём n-мерный динамический массив
{
    float** array = new float*[size];
    for (int i = 0; i < size; i++)
    {
        array[i] = new float[size];
    }
    return array;
}
 
void Sort(float** array, int size)          //сортировка массива
{
    char filename[40];
    cout << "Введите название файла куда будем выводить результат работы: " << endl;
    cin >> filename;
    ofstream fout;
    fout.open(filename, ios_base::app);
    int i, j;
    int n = 0;
    fout << "\n";
    std::cout << "\n\n";
    i = size / 2, j = size / 2;
    do {
        n++;
        for (int k = 0; k < n; k++)         
            fout << array[i--][j] << ' ';
        if (n == size)
            break;
        for (int k = 0; k < n; k++)                 
            fout << array[i][j++] << ' ';       
        n++;
        for (int k = 0; k < n; k++)         
            fout << array[i++][j] << ' ';       
        for (int k = 0; k < n; k++)                 
            fout << array[i][j--] << ' ';       
    } while (n);
    fout.close();
}
 
void Input(float** array, int size)         //ввод эл-тов массива
{
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            cout << "array[" << i << "][" << j << "]=? ";
            cin >> array[i][j];
        }
    }
    std::cout << "\n \n";
}
 
void Print(float** array, int size) {               //вывод массива
    char filename[40];
    cout << "Введите название файла куда будем выводить результат работы: " << endl;
    cin >> filename;
    ofstream fout;
    fout.open(filename);
    fout << size << "  " << size << "\n\n";
    cout << "\n";
        std::cout << size << "  " << size << "\n\n";
        for (int i = 0; i < size; ++i) {
            for (int j = 0; j < size; ++j) {
                std::cout << array[i][j] << ' ';
                fout << array[i][j] << ' ';
            }
            std::cout << std::endl;
            fout << endl;
        }
    fout.close();
    }
 
void Delete(float** array, int size) {
    for (int i = 0; i < size; i++)
        delete[] array[i];
    delete[] array;
}
Добавлено через 4 минуты
Собственно ещё возникала проблема с тем, чтобы выводить одновременно результат работы в консоль и параллельно в файл, то есть до вызова функции Sort не возникало, но когда я к строчкам вывода в файл, начиная с 60-ой добавляла std::cout << ........... ; то всё компилировалось, но во время работы в консоли, а конкретнее когда функция Sort должна была распечатать что от неё требуют - печатала 1-ое число и выскакивала ошибка доступа к памяти, после чего вызывался отладчик, которым я пользоваться естественно не умею
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
08.10.2016, 11:39     Ввести с клавиатуры имя файла и передать его в функцию #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
void Sort(float**, int, char*);
 
int main()
{
    setlocale(LC_ALL, "");
    int size;
    cout << "Введите размерность матрицы: ";
    cin >> size;
    if (size % 2 == 0)
    {
        cout << "Для сортировки заданным методом матрица должны быть нечётной размерности!" << endl;
        system("pause");
        exit(1);
    }
 
    char filename[40];
    cout << "Введите название файла куда будем выводить результат работы: " << endl;
    cin >> filename;
 
    float **array = Create(size);
    Input(array, size);
    Print(array, size);
    Sort(array, size, filename);
//...
 
void Sort(float** array, int size, char *filename)          //сортировка массива
{
    ofstream fout;
    fout.open(filename, ios_base::app);
    int i, j;
    int n = 0;
    fout << "\n";
    std::cout << "\n\n";
    i = size / 2, j = size / 2;
    do {
        n++;
        for (int k = 0; k < n; k++)         
            fout << array[i--][j] << ' ';
        if (n == size)
            break;
        for (int k = 0; k < n; k++)                 
            fout << array[i][j++] << ' ';       
        n++;
        for (int k = 0; k < n; k++)         
            fout << array[i++][j] << ' ';       
        for (int k = 0; k < n; k++)                 
            fout << array[i][j--] << ' ';       
    } while (n);
    fout.close();
}
Так же и со второй функцией.
Anya1919
 Аватар для Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
08.10.2016, 11:44  [ТС]     Ввести с клавиатуры имя файла и передать его в функцию #10
Цитата Сообщение от nmcf Посмотреть сообщение
Так же и со второй функцией.
Спасибо. Пыталась сделать так же, но по какой-то причине ide ругалось, с пониманием указателей беда у меня.
А по поводу вывода на экран и в файл в функции Sort можете предположить почему возникает ошибка доступа к памяти? В любом случае спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2016, 13:16     Ввести с клавиатуры имя файла и передать его в функцию
Еще ссылки по теме:

Создать функцию вывода, в которую можно передать обьект, и вывести имя обьекта и все его поля C++
С++. Ввести текст с клавиатуры и сохранить его в текстовом документе C++
C++ Что такое вектор? И как его ввести с клавиатуры?

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

Или воспользуйтесь поиском по форуму:
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
08.10.2016, 13:16     Ввести с клавиатуры имя файла и передать его в функцию #11
Ты скобки ставишь, когда вывод добавляешь?
C++
1
2
3
4
5
        for (int k = 0; k < n; k++)
        {         
            fout << array[i--][j] << ' ';
            cout << array[i--][j] << ' ';
        }
Yandex
Объявления
08.10.2016, 13:16     Ввести с клавиатуры имя файла и передать его в функцию
Ответ Создать тему
Опции темы

Текущее время: 02:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru