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

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

Войти
Регистрация
Восстановить пароль
 
Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
#1

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

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

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

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

Ввести с клавиатуры массив, распределить память для его размещения и ввести int значения этого массива - C++
Подскажите пожалуйста. Задача такая : ввести с клавиатуры n элементов массива, распределить память для его размещения и ввести int значения...

Как ввести двумерный массив с клавиатуры? Его размерность [n][m] нужно задавать с клавиатуры. - C++
Привет всем. Как ввести двумерный массив с клавиатуры? Его размерность нужно задавать с клавиатуры.

Ввести с клавиатуры массив из N чисел (N также вводится с клавиатуры). Найти наименьший из его положительных элементов. - C++
Ввести с клавиатуры массив из N чисел (N также вводится с клавиатуры). Найти наименьший из его положительных элементов. Начиная от этого...

Напишите программу, которая приглашает пользователя ввести его имя и фамилию - C++
Напишите программу, которая приглашает пользователя ввести его имя и фамилию, а затем построит, сохранит и отобразит третью строку,...

Ввести слово с клавиатуры, а затем перевернуть его - C++
Здраствуйте) хотел тут спросить одно задание) Ввести слово с клавиатуры, а затем перевернуть его.) Заранее благодарен)

10
nd2
2353 / 1943 / 681
Регистрация: 29.01.2016
Сообщений: 6,326
08.10.2016, 06:20 #2
Цитата Сообщение от Anya1919 Посмотреть сообщение
пыталась через указатель на char, вообщем не вышло.
Что, собственно, не вышло? Покажи как делала, что вводила, как передавала. Тут, вроде бы, проблем быть не должно.
1
MansMI
1274 / 1052 / 290
Регистрация: 08.01.2012
Сообщений: 3,969
08.10.2016, 06:21 #3
C++
1
cin.getline(filename,40);
0
gru74ik
Модератор
Эксперт CЭксперт С++
4189 / 1837 / 198
Регистрация: 20.02.2013
Сообщений: 4,976
Записей в блоге: 21
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
Peoples
1170 / 675 / 424
Регистрация: 06.02.2016
Сообщений: 1,777
Записей в блоге: 13
Завершенные тесты: 4
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
2353 / 1943 / 681
Регистрация: 29.01.2016
Сообщений: 6,326
08.10.2016, 10:39 #6
Цитата Сообщение от MansMI Посмотреть сообщение
cin.getline(filename,40);
Цитата Сообщение от gru74ik Посмотреть сообщение
используйте std::getline
Цитата Сообщение от Peoples Посмотреть сообщение
getline(cin,s); // вводим имя файла
Как сговорились... Что, без getline(), прямо, никак не обойтись?
0
Peoples
1170 / 675 / 424
Регистрация: 06.02.2016
Сообщений: 1,777
Записей в блоге: 13
Завершенные тесты: 4
08.10.2016, 10:41 #7
nd2, Не запрещено, значит разрешено
Но имя файла скорее всего будет без пробелов, можно и просто cin
0
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-ое число и выскакивала ошибка доступа к памяти, после чего вызывался отладчик, которым я пользоваться естественно не умею
0
nmcf
5353 / 4673 / 1564
Регистрация: 14.04.2014
Сообщений: 18,630
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();
}
Так же и со второй функцией.
1
Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
08.10.2016, 11:44  [ТС] #10
Цитата Сообщение от nmcf Посмотреть сообщение
Так же и со второй функцией.
Спасибо. Пыталась сделать так же, но по какой-то причине ide ругалось, с пониманием указателей беда у меня.
А по поводу вывода на экран и в файл в функции Sort можете предположить почему возникает ошибка доступа к памяти? В любом случае спасибо
0
nmcf
5353 / 4673 / 1564
Регистрация: 14.04.2014
Сообщений: 18,630
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
08.10.2016, 13:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2016, 13:16
Привет! Вот еще темы с ответами:

Ввести с клавиатуры массив, а потом вывести его на экран - C++
Народ, помогите исправить ошибки, пожалуйста.. Нужно ввести с клавиатуры массив, а потом вывести его на экран.. #include &lt;iostream&gt; ...

С++. Ввести текст с клавиатуры и сохранить его в текстовом документе - C++
Написать программку на С++, которая вводит текст с клавиатуры и сохраняет его в текстовом документе.

Что такое вектор? И как его ввести с клавиатуры? - C++
Вести с клавиатуры целые числа M,N и вектор A=(a1,a2...an), n=15

Ввести массив с клавиатуры и найти количество его элементов - C++
Две связанные между собой задачи: 6. Напишите программу, использующую следующие функции: Fill_array() принимает в качестве...


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

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

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