- •Оператор перехода
- •Оператор return
- •Оператор goto
- •Оператор break
- •Функция exit()
- •Оператор continue
- •Сортировка массива
- •Сортировка массива выбором
- •Сортировка методом пузырька
- •Линейный поиск в массивах
- •Бинарный поиск в массивах
- •Файловый ввод/вывод в языке Си
- •[Править]Открытие файла при помощи fopen
- •[Править]Закрытие потока при помощи fclose
- •[Править]Чтение из потока [править]при помощи fgetc
- •[Править]«Ловушка» eof
- •[Править]при помощи fgets
- •[Править]fwrite
- •[Править]Запись в файл при помощи fwrite
- •[Править]Запись в поток при помощи fputc
- •[Править]Пример использования
- •Первое знакомство с перегрузкой функций
- •Когда необходима перегрузка
- •Что вам необходимо знать
- •Рекурсия
[Править]при помощи fgets
Функция fgets применяется для чтения строки из потока. Считывание происходит до тех пор пока не будет достигнут конец строки (hex:0D0A, эквивалентны в листингах\n) или длина строки, в которую происходит считывание. Предположим, у нас есть файл some_file.txt с текстом
палиндромы
А в Енисее - синева.
А лама мала.
А лис, он умен - крыса сыр к нему носила. (И. Бабицкий)
#include <stdio.h>
#include <string.h>
int main (int argc, char* argv[]) /* argc хранит количество параметров, а argv[] указатели на эти параметры.
Например, если мы запустим исполняемый файл "fgets_example param1 param2", то argc будет равно 3, а argv[] = {"fgets_example", "param1", "param2"}*/
{
FILE *file;
char *fname = "some_file.txt";
char result_sting[20]; //Строка в 20 символов
file = fopen(fname,"r");
if(file == 0)
{
printf("не могу открыть файл '%s'",fname);
return 0;
}
int i=0;
char *real_tail;
while(fgets(result_sting,sizeof(result_sting),file))
{
real_tail="";
printf("Строка %d:Длина строки - %d:",i++,strlen(result_sting));
if(result_sting[strlen(result_sting)-1] == '\n')//проверяем является ли последний элемент в строке символом ее окончания
{
real_tail="\\n";
result_sting[strlen(result_sting)-1]='\0';
};// эта часть кода добавлена лишь для отображения символа конца строки в консоль без перевода на новую строку
printf("%s%s\n",result_sting,real_tail);
}
fclose(file);
return 0;
}
в результате выполнения мы получим
Строка 0:Длина строки - 11:палиндромы\n
Строка 1:Длина строки - 19: А в Енисее - си
Строка 2:Длина строки - 6:нева.\n
Строка 3:Длина строки - 17: А лама мала.\n
Строка 4:Длина строки - 19: А лис, он умен
Строка 5:Длина строки - 19:- крыса сыр к нему
Строка 6:Длина строки - 19:носила. (И. Бабицки
Строка 7:Длина строки - 2:й)
Функция strlen определяет длину строки по количеству символов до '\0' так например
printf("%d",strlen("123 \0 123")); //выведет 4
[Править]fwrite
В языке программирования Си функции fread и fwrite соответственно реализуют файловые операции ввода и вывода. fread и fwrite объявлены в <stdio.h>.
[Править]Запись в файл при помощи fwrite
fwrite определяется как
int fwrite ( const char * array, size_t size, size_t count, FILE * stream );
Функция fwrite записывает блок данных в поток. Таким образом запишется массив элементов array в текущую позицию в потоке. Для каждого элемента запишетсяsize байт. Индикатор позиции в потоке изменится на число байт, записанных успешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.
Следующая программа открывает файл пример.txt, записывает в него строку символов, а затем его закрывает.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
size_t count;
char const *str = "привет\n";
fp = fopen("пример.txt", "wb");
if(fp == NULL) {
perror("ошибка открытия пример.txt");
return EXIT_FAILURE;
}
count = fwrite(str, 1, strlen(str), fp);
printf("Записано %lu байт. fclose(fp) %s.\n", (unsigned long)count, fclose(fp) == 0 ? "успешно" : "с ошибкой");
return 0;
}