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

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

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

Работа с файлами (С) - C++

01.07.2010, 15:17. Просмотров 1067. Ответов 15
Метки нет (Все метки)

Подскажите как работать с файлами в С. Чтение файла, запись в файл, вывод содержимого файла на экран. Желательно на примерах). Зарание спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2010, 15:17     Работа с файлами (С)
Посмотрите здесь:

Работа с файлами - C++
ДОБРЫЙ ВЕЧЕР! Такая задачка.. Написать программу по созданию базы данных ( например: имя, фамилия, возраст). Программа создает эту...

Работа с файлами - C++
Вообщем стоит две задачи: 1) с помощью функций fstream в текстовом документе заменить все символы табуляции на пробелы. 2) в бинарном...

Работа с файлами - C++
Доброго времени суток. Нужна ваша помощь в общем есть у нас файл который создан в putti, перед этим файлом написано -r-w-x-- (r-чтение,...

Работа с файлами - C++
На указатель ругается Possibly incorrect assignment Строки в файл записывает, но не выводит. Что не так? #include <fstream.h> ...

Работа с файлами - C++
Случайным образом создать таблицу пар значений и записать её в текстовый файл в виде: n * c 5 ...

работа с файлами - C++
Текст берётся из файла. Ка ксделать используя библиотеку fstream знаю, но надо сделать без неё то есть простые fread, fwrite и т.д.)....

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.07.2010, 15:59     Работа с файлами (С) #2
Чтение:

fgets() - Читает до символа конца строки
C
1
2
3
4
5
6
7
include <stdio.h>
               FILE *stream;
               char line[100], *result;
               /* следующий оператор выбирает строку  символов  из  потока
         stream. Может быть считано не более 99 символов  либо все символы
         до символа новой строки '\n', включая и его. */
               result = fgets(line, 100, stream);.
fscanf() - До пробела
Пример:

C
1
2
3
4
5
6
while (fscanf(f,"%s",Sn)!=EOF)
        {
            fscanf(f,"%s",Se);
            list*h2=form(Sn,Se);
            ins(h,e,h2,k);
        }
Запись: fputs() - Функция fputs() записывает в заданный поток stream содержимое строки, адресуемой указателем str. При этом завершающий нулевой символ (т.е. символ конца строки ('0')) не записывается.

C
1
2
3
4
5
Пример
 
Приведенный фрагмент программы записывает в поток, связанный с файлом fp, строку это тест.
 
fputs("'это тест", fp);
fprintf() - Функция fprintf() выводит в лоток, адресуемый параметром stream, значения аргументов, составляющих список аргументов, в соответствии с заданной строкой формата format. Возвращаемое значение равно количеству реально выведенных символов. Если при выводе возникла ошибка, возвращается отрицательное число.

Пример:

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
int main(void)
{   
FILE *fp;        
if((fp=fopen("test", "wb")) == NULL)    
{      printf("Не удаётся открыть файл.\n");      
exit(1);   
}   
fprintf(fp, "это тест %d %f", 28, 04.06);   fclose(fp);return 0;}

Вывод содержимого: Не помню точно
neon902
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 62
01.07.2010, 16:25  [ТС]     Работа с файлами (С) #3
Можешь пояснить
fscanf(f,"%s",Se);
list*h2=form(Sn,Se);
ins(h,e,h2,k);
что такое Sn,Se и ins(h,e,h2,k)?

fprintf(fp, "это тест %d %f", 28, 04.06) что это за цифры 28, 04.06?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.07.2010, 16:29     Работа с файлами (С) #4
Цитата Сообщение от neon902 Посмотреть сообщение
Можешь пояснить
fscanf(f,"%s",Se);
list*h2=form(Sn,Se);
ins(h,e,h2,k);
что такое Sn,Se и ins(h,e,h2,k)?

fprintf(fp, "это тест %d %f", 28, 04.06) что это за цифры 28, 04.06?
Могу. Это пример из моей программы. Так что, что это такое это абсолютно не суть) Вопросы таки были про fscanf.
П.С. Sn, Se -массивы типа char

fprintf. Полагаю рандомные. Прототип fprintf -

fprintf(f, "%s", str)

Где f - файл, %s - формат вывода, str собственно сама строка. П.С. это естественно для строки. Для других типов меняем %s на нужное)
neon902
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 62
01.07.2010, 16:36  [ТС]     Работа с файлами (С) #5
Я что-то туплю, всё равно не допонял, давай на моей задачке, мне нужно из файла считать несколько двухмерных матриц и работать с ними. как это примерно будит выглядить?
Просто я не понимаю как работать отдельно с элементами матриц, если считываешь их полность или построчно.
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
01.07.2010, 17:33     Работа с файлами (С) #6
Цитата Сообщение от Lavroff Посмотреть сообщение
fscanf() - До пробела
fscanf() чего только не читает...
C
1
2
3
char buf[BUFSIZ];
...
fscanf(file, "%[^\n]%*c", buf);
Читает файл построчно, при чём символ \n в буфер не заносится
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.07.2010, 17:37     Работа с файлами (С) #7
Цитата Сообщение от neon902 Посмотреть сообщение
Я что-то туплю, всё равно не допонял, давай на моей задачке, мне нужно из файла считать несколько двухмерных матриц и работать с ними. как это примерно будит выглядить?
Просто я не понимаю как работать отдельно с элементами матриц, если считываешь их полность или построчно.
Как матрица в файле расположена?

C
1
2
3
4
while(fscanf(f, "%d", a[i])!=EOF)
{
бла бла бла
}
Не уверен. Даже не знаю будет ли такое пахать
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
01.07.2010, 17:45     Работа с файлами (С) #8
Цитата Сообщение от Lavroff Посмотреть сообщение
Даже не знаю будет ли такое пахать
Не будет.
C
1
2
3
...
while( fscanf(f, "%d", &a[i]) == 1 )
...
Цитата Сообщение от neon902 Посмотреть сообщение
мне нужно из файла считать несколько двухмерных матриц и работать с ними.
Сильно зависит от того, в каком виде матрицы в файле хранятся. Из вариантов:
1. в первой строке два числа - количество строк и столбцов, дальше подряд в строку все значения
2. в первой строке - количество строк, во второй столбцов, дальше в каждой строке по элементу
3. матрица записана в файл "как есть" - то есть типа
5 8 6 1 6 3
4 5 1 3 5 7
8 0 2 4 3 5

И ещё можно кучу разных способов придумать. С этим определитесь как-нибудь, а дальше видно будет...
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.07.2010, 17:47     Работа с файлами (С) #9
easybudda, Да уж. Про & я весело забыл) Да и про EOF что-то тоже зря написал
neon902
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 62
01.07.2010, 18:06  [ТС]     Работа с файлами (С) #10
Ну лучше матрицу записывать так:
5 8 6 1 6 3
4 5 1 3 5 7
8 0 2 4 3 5
как при таком записи считать эту матрицу?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.07.2010, 18:07     Работа с файлами (С) #11
fscanf видимо
neon902
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 62
01.07.2010, 18:10  [ТС]     Работа с файлами (С) #12
Ну это я уже понял)) а какой примерный код будит? можете написать
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
02.07.2010, 10:22     Работа с файлами (С) #13
а перевод строки как сделать??
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
02.07.2010, 12:55     Работа с файлами (С) #14
Цитата Сообщение от easybudda Посмотреть сообщение
char buf[BUFSIZ];
...
fscanf(file, "%[^\n]%*c", buf);
Читает файл построчно, при чём символ \n в буфер не заносится
объясните пожалуйста вот это "%[^\n]%*c"
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.07.2010, 09:50     Работа с файлами (С) #15
Цитата Сообщение от neon902
Ну лучше матрицу записывать так:
5 8 6 1 6 3
4 5 1 3 5 7
8 0 2 4 3 5
как при таком записи считать эту матрицу?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    int arr[3][6] = { 0 };
    int i;
 
    i = 0;
    while
    (
        fscanf(
            ifp,
            "%d %d %d %d %d %d",
            arr[i][0],
            arr[i][1],
            arr[i][2],
            arr[i][3],
            arr[i][4],
            arr[i][5]
        ) == 6 && i < 3
    )
        i++;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2010, 13:47     Работа с файлами (С)
Еще ссылки по теме:

Работа с файлами - C++
Помогите пожалуйста, что не правильно,,,не выводит результат в файл #include&lt;iostream.h&gt;; #include&lt;fstream.h&gt;; #include&lt;iomanip&gt;; ...

работа с файлами - C++
подскажите как можно сохранить/считать с файла *.dat и чтобы этот файл не смогли прочесть(даже открыть) другие пользователи.

работа с файлами - C++
1. Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Удалить из этого файла все...

Работа с файлами - C++
Нужно записать с одного файла в другой на С++ Добавлено через 46 минут ап ап ап

Работа с файлами - C++
Добрый вечер! Помогите, есть какая - то лажа: код компилится но консоль виснет и в файл ничего не записывается. #include...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
03.07.2010, 13:47     Работа с файлами (С) #16
Цитата Сообщение от Egeni Посмотреть сообщение
объясните пожалуйста вот это "%[^\n]%*c"
А в справочнике описание функции scanf() посмотреть - не?
Г. Шилдт "Послный справочник по С"
Использование набора сканируемых символов

Функция scanf() поддерживает спецификатор формата общего назначения, называемый набором сканируемых символов (scanset). Набор сканируемых символов представляет собой множество символов. Когда scanf() обрабатывает такое множество, то вводит только те символы, которые входят в набор сканируемых символов. Читаемые символы будут помещаться в массив символов, который указан аргументом, соответствующим набору сканируемых символов. Этот набор определяется следующим образом: все те символы, которые предстоит сканировать, помещают в квадратные скобки. Непосредственно перед открывающей квадратной скобкой должен находиться знак %. Например, следующий набор сканируемых символов дает указание scanf() сканировать только символы X, Y и Z:

%[XYZ]

При использовании набора сканируемых символов функция scanf() продолжает читать символы, помещая их в соответствующий массив символов, пока не встретится символ, не входящий в этот набор. При возвращении из scanf() в массиве символов будет находиться строка, состоящая из считанных символов, причем эта строка будет заканчиваться символом конца строки. Чтобы увидеть, как это все работает, запустите следующую программу:

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void)
{
  int i;
  char str[80], str2[80];
 
  scanf("%d%[abcdefg]%s", &i, str, str2);
  printf("%d %s %s", i, str, str2);
 
  return 0;
}
Введите 123abcdtye, а затем нажмите клавишу <ENTER>. После этого программа выведет 123 abed tye. Так как в данном случае 't' не входит в набор сканируемых символов, то scanf() прекратила чтение символов в переменную str сразу после того, как встретился символ 't'. Оставшиеся символы были помещены в переменную str2.

Кроме того, можно указать набор сканируемых символов, работающий с точностью до наоборот; тогда первым символом в таком наборе должен быть ^. Этот символ дает указание scanf() принимать любой символ, который не входит в набор сканируемых символов.

В большинстве реализаций для указания диапазона можно использовать дефис. Например, указанный ниже набор сканируемых символов дает функции scanf() указание принимать символы от А до Z:

%[A-Z]

Следует обратить внимание на такой важный момент: набор сканируемых символов чувствителен к регистру букв. Если нужно сканировать буквы и на верхнем, и на нижнем регистре, то их надо указывать отдельно для каждого регистра.


Подавление ввода

scanf() может прочитать поле, но не присваивать прочитанное значение никакой переменной; для этого надо перед литерой-спецификатором формата поля поставить звездочку, *. Например, когда выполняется оператор

scanf("%d%*c%d", &x, &y);

можно ввести пару координат 10,10. Запятая будет прочитана правильно, но ничему не будет присвоена. Подавление присвоения особенно полезно тогда, когда нужно обработать только часть того, что вводится.
Yandex
Объявления
03.07.2010, 13:47     Работа с файлами (С)
Ответ Создать тему
Опции темы

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