Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
3 / 1 / 2
Регистрация: 06.10.2016
Сообщений: 17
1

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

08.10.2016, 00:17. Показов 9784. Ответов 10
Метки нет (Все метки)

Сабж, получаем с клавиатуры имя файла .txt, чтобы далее создать его и выводить туда результат вычислений, надо передать название файла, то есть filename в качестве аргумента в несколько функций и объявить в прототипах, но возникают проблемы с этим, пыталась через указатель на char, вообщем не вышло.
C++
1
2
3
    char filename[40];
    cout << "vvedite imya faila: ";
    cin >> filename;
Помогите пожалуйста, если надо скину весь код целиком.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2016, 00:17
Ответы с готовыми решениями:

Ввести с клавиатуры имя файла; если он существует, переименовать его
Ввести с клавиатуры имя файла; если он существует, переименовать его (новое имя тоже вводится с...

Ввести с клавиатуры имя файла; если он существует, переименовать его
Ребят очень нужна ваша помощь, в понедельник сдача практики осталась последняя прога.. никак не...

Задание : ввести имя файла с клавиатуры и если есть то открыть его
Задание такое вести полное имя файла с клавиатуры и если он существует, то открыть его,...

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

10
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
08.10.2016, 06:20 2
Цитата Сообщение от Anya1919 Посмотреть сообщение
пыталась через указатель на char, вообщем не вышло.
Что, собственно, не вышло? Покажи как делала, что вводила, как передавала. Тут, вроде бы, проблем быть не должно.
1
1466 / 1174 / 551
Регистрация: 08.01.2012
Сообщений: 4,524
08.10.2016, 06:21 3
C++
1
cin.getline(filename,40);
0
Эксперт CЭксперт С++
5072 / 2257 / 331
Регистрация: 20.02.2013
Сообщений: 5,595
Записей в блоге: 19
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;
}
1
Эксперт С++
1605 / 936 / 778
Регистрация: 06.02.2016
Сообщений: 2,425
Записей в блоге: 30
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;
}
1
nd2
3422 / 2802 / 1252
Регистрация: 29.01.2016
Сообщений: 9,426
08.10.2016, 10:39 6
Цитата Сообщение от MansMI Посмотреть сообщение
cin.getline(filename,40);
Цитата Сообщение от gru74ik Посмотреть сообщение
используйте std::getline
Цитата Сообщение от Peoples Посмотреть сообщение
getline(cin,s); // вводим имя файла
Как сговорились... Что, без getline(), прямо, никак не обойтись?
0
Эксперт С++
1605 / 936 / 778
Регистрация: 06.02.2016
Сообщений: 2,425
Записей в блоге: 30
08.10.2016, 10:41 7
nd2, Не запрещено, значит разрешено
Но имя файла скорее всего будет без пробелов, можно и просто cin
0
3 / 1 / 2
Регистрация: 06.10.2016
Сообщений: 17
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-ое число и выскакивала ошибка доступа к памяти, после чего вызывался отладчик, которым я пользоваться естественно не умею
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
08.10.2016, 11:39 9
Лучший ответ Сообщение было отмечено Anya1919 как решение

Решение

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();
}
Так же и со второй функцией.
1
3 / 1 / 2
Регистрация: 06.10.2016
Сообщений: 17
08.10.2016, 11:44  [ТС] 10
Цитата Сообщение от nmcf Посмотреть сообщение
Так же и со второй функцией.
Спасибо. Пыталась сделать так же, но по какой-то причине ide ругалось, с пониманием указателей беда у меня.
А по поводу вывода на экран и в файл в функции Sort можете предположить почему возникает ошибка доступа к памяти? В любом случае спасибо
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
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] << ' ';
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2016, 13:16

Как передать в функцию имя файла
Пишу на VS. Не знаю, как передать в качестве параметра имя файла,в инете ничего не нашел. ...

С клавиатуры ввести имя файла. В указанном файле удалить все четные строки
С клавиатуры ввести имя файла. В указанном файле удалить все четные строки.

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

Передать имя загруженного файла и использовать его
Доброго времени суток, уважаемые форумчане! if(is_uploaded_file($_FILES)) {...


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

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

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