Как передать файл в функцию c
Перейти к содержимому

Как передать файл в функцию c

  • автор:

Как передать файл в функцию для записи/чтения (разные функции)

Author24 — интернет-сервис помощи студентам

На данный момент он у меня повторяется несколько раз, с вариантами f1, f2, f3 и F1.txt, F2.txt, F3.txt соответственно.
Логичней сделать из него функцию, но не знаю как передать в нее файл для записи.

Далее вот такой блок:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
ifstream f4("F1.txt"); int * m1; m1 = new int [size1](); for (i=0; isize1; i++) { f4>>m1[i]; } f4.close(); for (i=0;isize1;++i) { if (m1[i]m1[i+1]) { int temp=m1[i]; m1[i]=m1[i+1]; m1[i+1]=temp; i=-1; } }

Также повторяется три раза, варианты f4,f5,f6, m1[],m2[],m3[], size1,size2,size3 ну и те же что в первом три txt.
Вопрос тот же — как сделать функцию либо функции.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как открыть файл одновременно для чтения и для записи?
Делаю вот так, но ничего не получается.:( std::fstream inOutCredit("credit.dat", std::ios::ate |.

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

Как создать один файл для чтения и записи одновременно?
Пробовал перезапись, но содержимое файла терялось while (file1.hasNext()) < .

Функции для записи в сокет и чтения из сокета: как правильно задать для windows?
делала проект под Linux и в нем успешно работали write и read. Но теперь мне нужно.

73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2

хоть по ссылке, хоть через указатель 🙂

Добавлено через 2 минуты

void func(ifstream &f) // по ссылке void func(ifstream *f) // через указатель

Передача файла в параметр функции,с++

Как передать файл в функцию вроде разобрался. Но есть непонятные моменты. Вот решил я по ссылке передать объект ifsream у которого есть определенные методы. Вопрос: почему при попытке манипулирования файлом с помощью методов (например get ) в самой функции ничего не происходит? Как будто его там и нет. Если еще раз создать такой же объект, то все работает. Но это не совсем то что нужно, т.к. смысл передачи файла в функцию отпадает. Что я делаю не так?

int main() < ifstream fin("fdata.txt"); ofstream fout("fout.txt"); code(fin); >void code(ifstream &in)< char masIn[31]; int i=0; in>>masIn[i];//здесь любая попытка записать в массив не работает cout

UPD:нашел проблему в функции,которая нужна для подсчета символов в файле

 int shifr::filesize(ifstream &fin) < char ch; int i=0; while(ch=fin.get()!=EOF)< i++; >return i; > 

теперь непонимание как эта функция меняет исходник файла?результат в виде непонятных символов

Отслеживать

задан 11 окт 2017 в 18:53

141 2 2 серебряных знака 9 9 бронзовых знаков

@HasmikGaryaka для ifstream разве он тут нужен?

11 окт 2017 в 19:14

Что значит «не работает»? Как вы это определили? В файле есть нужные значения?

11 окт 2017 в 19:15

@Harry нашел проблему в функции,только не понял как именно она все «ломает», while(ch=fin.get()!=EOF) < i++; >

11 окт 2017 в 19:26

функция просто нужна для подсчета символов в файле

Файловый ввод-вывод в C++

В языке C++ ввод-вывод осуществляется через объекты классов ifstream (для чтения данных) и ofstream (для вывода данных). Эти классы объявлены в заголовочном файле fstream .

При создании этих объектов нужно передать в конструктор один параметр — имя файла.

После этого с этими объектами можно работать точно так же, как с объектами cin и сout .

После окончания работы с файлами, файлы нужно «закрыть» эти объекты, вызвав для них метод close() .

Приведем пример программы, которая считывает два числа из файла с именем input.txt и выводит результат в файл output.txt .

#include
using namespace std;

int main()
ifstream fin(«input.txt»);
ofstream fout(«output.txt»);
int a, b;
fin >> a >> b;
fout fin.close();
fout.close();
>

Аналогично для считывания строки до символа конца строки из файла можно использовать функцию getline с двумя параметрами — файловый объект, из которого читаются данные и строка, куда записывается результат. Например:

Для проверки состояния файла можно использовать метод файла eof() . Он возвращает значение true или false в зависимости от того, был ли обнаружен конец файла при чтении:

Но при использовании этого метода могут возникнуть затруднения, например, с тем, что если после последнего числа в файле стоит символ конца строки, то состояние «достигнут конец файла» произойдет не после чтения последнего числа, а после следующего чтения.

Более надежный (и простой!) способ считать последовательность чисел из файла до конца файла — использование значения, возвращаемого при считывании:

c++ ,как файл передать в функцию как параметр

в общем . у меня в классе есть функция которая принимает два параметра,
один список односвязный (vector) второй файл из которого я должен взять
данные чтоб заполнить собсно список, (числа) , помогите плз.

Дополнен 13 лет назад

эмм . ну вот, я в main() обьявляю FILE *in = fopen() . и тд ..
если можно напишите как в коде будет выглядеть,
чтоб передать этот файл в метод класса
Допустим :
int main(void)
<
FILE *in = fopen(«txt.txt»,»r»);
vector list1;
List L;
L.Readlist(vector &vec, «как сюда передать файл»);

Дополнен 13 лет назад

понятно, а допустим, если ипользовать ifstream fin(«file.txt»);
как его передать я понял, а что мне писать в классе ?
допустим
class ..
public:
int Readlist(vector &vec, » ifstream fin «);
вместо ifstream fin что написать ?

Лучший ответ

Ну, вариантов множество:
1. Передать путь файла строкой.
2. Передать путь файла как аргумент при запуске (program.exe /filename.txt), затем взять его из массива argv[]
3. Передать вывод программы в файл при запуске (program.exe > filename.txt)

Остальные ответы

Передай или FILE * или поток
ifstream fin(«input.txt»);
myfunc(vect,fin);

P.S.не успел увидеть твоё дополнение
FILE *in = fopen(«txt.txt»,»r»);
vector list1;
List L;
L.Readlist(list1, in);

А прототип ф-ции такой в твоём классе List
void List::Readlist(vector &vec, FILE *f);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *