Начало работы
hello.c
#include <stdio.h>
int main(void) {
printf("Hello World!\n");
return 0;
}
Скомпилируйте файл hello.c
с помощью gcc
.
``bash $ gcc hello.c -o hello
Запустить скомпилированный двоичный файл `hello`.
``bash
$ ./hello
Вывод => Hello World!
Переменные
int myNum = 15;
int myNum2; // не присваивать, а присваивать
myNum2 = 15;
int myNum3 = 15; // myNum3 равно 15
myNum3 = 10; // myNum3 теперь равно 10
float myFloat = 5.99; // число с плавающей точкой
char myLetter = 'D'; // символ
int x = 5;
int y = 6;
int sum = x + y; // добавление переменных к сумме
// объявить несколько переменных
int x = 5, y = 6, z = 50;
Константы
const int minutesPerHour = 60;
const float PI = 3.14;
Лучшие практики
const int BIRTHYEAR = 1980;
Комментарий
// это комментарий
printf("Hello World!"); // Можно комментировать в любом месте файла
/*Многострочный комментарий, выводим Hello World!
на экран, это круто */
Вывести текст
printf("Я изучаю язык C.");
int testInteger = 5;
printf("Число = %d", testInteger);
float f = 5.99; // число с плавающей точкой
printf("Значение = %f", f);
short a = 0b1010110; // двоичное число
int b = 02713; // восьмеричное число
long c = 0X1DAB83; // шестнадцатеричное число
// вывод в восьмеричном виде
printf("a=%ho, b=%o, c=%lo\n", a, b, c);
// вывод => a=126, b=2713, c=7325603
// Вывод в десятичном виде
printf("a=%hd, b=%d, c=%ld\n", a, b, c);
// вывод => a=86, b=1483, c=1944451
// вывод в шестнадцатеричном виде (буквы строчные)
printf("a=%hx, b=%x, c=%lx\n", a, b, c);
// вывод => a=56, b=5cb, c=1dab83
// Вывод в шестнадцатеричном виде (заглавными буквами)
printf("a=%hX, b=%X, c=%lX\n", a, b, c);
// вывод => a=56, b=5CB, c=1DAB83
Управление количеством пробелов
int a1 = 20, a2 = 345, a3 = 700;
int b1 = 56720, b2 = 9999, b3 = 20098;
int c1 = 233, c2 = 205, c3 = 1;
int d1 = 34, d2 = 0, d3 = 23;
printf("%-9d %-9d %-9d\n", a1, a2, a3);
printf("%-9d %-9d %-9d\n", b1, b2, b3);
printf("%-9d %-9d %-9d\n", c1, c2, c3);
printf("%-9d %-9d %-9d\n", d1, d2, d3);
результат вывода
``bash 20 345 700 56720 9999 20098 233 205 1 34 0 23
В `%-9d`, `d` означает вывод по базе `10`, `9` означает занимать не менее `9` символов в ширину, а ширину не заполнять пробелами, `-` означает выравнивание влево
### Строки
```c
char greetings[] = "Hello World!";
printf("%s", greetings);
строка доступа
char greetings[] = "Hello World!";
printf("%c", greetings[0]);
модифицировать строку
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// печатает "Jello World!"
Другой способ создания строки
char greetings[] = {'H','e','l','l','\0'};
printf("%s", greetings);
// print "Hell!"
Создание строки с использованием символьного указателя (Литералы строк)
char *greetings = "Hello";
printf("%s", greetings);
// вывести "Hello!"
ПРИМЕЧАНИЕ: Строковые литералы могут храниться в разделе памяти, доступном только для чтения. Модификация строкового литерала приводит к неопределенному поведению. Модифицировать его нельзя!
C
**не имеет типа String, используйте тип char
и создайте массив
символов
Условие
int time = 20;
if (time < 18) {
printf("До свидания!");
} else {
printf("Добрый вечер!");
}
// Выход -> "Добрый вечер!"
int time = 22;
if (time < 10) {
printf("Доброе утро!");
} else if (time < 20) {
printf("До свидания!");
} else {
printf("Добрый вечер!");
}
// Output -> "Good evening!"
Тернарный оператор
int age = 20;
(age > 19) ? printf("Взрослый") : printf("Подросток");
Переключатель
int day = 4;
switch (day) {
case 3: printf("Wednesday"); break;
case 4: printf("Четверг"); break;
default:
printf("Выходные!");
}
// output -> "Четверг" (день 4)
Цикл While
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
ПРИМЕЧАНИЕ: Не забывайте инкрементировать переменную, используемую в условии, иначе цикл никогда не завершится и превратится в “бесконечный цикл”!
Цикл Do/While
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
For Loop
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
Выход из цикла Break/Continue
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
printf("%d\n", i);
}
выйти из цикла, когда i
будет равно 4
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
printf("%d\n", i);
}
Пример пропуска значения 4
While Break Пример
int i = 0;
while (i < 10) {
if (i == 4) {
break;
}
printf("%d\n", i);
i++;
}
Продолжение примера
int i = 0;
while (i < 10) {
i++;
if (i == 4) {
продолжить;
}
printf("%d\n", i);
}
Массивы
int myNumbers[] = {25, 50, 75, 100};
printf("%d", myNumbers[0]);
// вывод 25
изменить элементы массива
int myNumbers[] = {25, 50, 75, 100};
myNumbers[0] = 33;
printf("%d", myNumbers[0]);
Перебор массива
int myNumbers[] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
установить размер массива
// Объявляем массив из четырех целых чисел:
int myNumbers[4];
// добавляем элемент
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;
Перечисление Enum
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
определить переменную enum
enum week a, b, c;
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
С помощью переменной перечисления можно присвоить ей значение из списка
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
// или
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
Перечислим примеры приложений
enum week {Mon = 1, Tues, Wed, Thurs} day;
scanf("%d", &day);
switch(day) {
case Mon: puts("понедельник"); break;
case Tues: puts("Вторник"); break;
case Wed: puts("Wednesday"); break;
case Thursday: puts("Thursday"); break;
default: puts("Error!");
}
Пользовательский ввод
// Создаем целочисленную переменную для хранения числа, полученного от пользователя
int myNum;
// Просим пользователя ввести число
printf("Пожалуйста, введите число: \n");
// Получить и сохранить число, введенное пользователем
scanf("%d", &myNum);
// Вывод числа, введенного пользователем
printf("Число, которое вы ввели: %d", myNum);
Строка ввода пользователя
// создаем строку
char firstName[30];
// Попросить пользователя ввести текст
printf("Введите ваше имя: \n");
// получить и сохранить текст
scanf("%s", &firstName);
// выводим текст
printf("Hello %s.", firstName);
адрес памяти
При создании переменной ей присваивается адрес памяти
int myAge = 43;
printf("%p", &myAge);
// Выходные данные: 0x7ffe5367e044
Для доступа к нему используйте оператор ссылки (&
)
создать указатель
int myAge = 43; // переменная int
printf("%d", myAge); // вывод значения myAge(43)
// вывод адреса памяти myAge (0x7ffe5367e044)
printf("%p", &myAge);
переменная-указатель
int myAge = 43; // переменная int
int*ptr = &myAge; // переменная-указатель с именем ptr, используемая для хранения адреса myAge
printf("%d\n", myAge); // вывести значение myAge (43)
printf("%p\n", &myAge); // выводим адрес памяти myAge (0x7ffe5367e044)
printf("%p\n", ptr); // использование указателя (0x7ffe5367e044) для вывода адреса памяти myAge
Dereference
int myAge = 43; // объявление переменной
int*ptr = &myAge; // объявление указателя
// Ссылка: вывод myAge с помощью указателя
// адрес памяти (0x7ffe5367e044)
printf("%p\n", ptr);
// разыменование: вывод значения myAge с указателем (43)
printf("%d\n", *ptr);
Операторы
Арифметические операторы
int myNum = 100 + 50;
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
Оператор | Имя | Пример |
---|---|---|
+ |
Сложение | x + y |
- |
Вычитание | x - y |
* |
Умножение | x * y |
/ |
Деление | x / y |
% |
Modulo | x % y |
++ |
Increment | ++x |
-- |
Уменьшение | --x |
Оператор присваивания
пример | как |
---|---|
x = 5 |
x = 5 |
x += 3 |
x = x + 3 |
x -= 3 |
x = x - 3 |
x *= 3 |
x = x * 3 |
x /= 3 |
x = x / 3 |
x %= 3 |
x = x % 3 |
x &= 3 |
x = x & 3 |
x ` | =` 3 |
x ^= 3 |
x = x ^ 3 |
x >>= 3 |
x = x >> 3 |
x <<= 3 |
x = x << 3 |
Операторы сравнения
int x = 5;
int y = 3;
printf("%d", x > y);
// возвращает 1 (true), так как 5 больше 3
Символ | Имя | Пример |
---|---|---|
== |
равно | x == y |
!= |
не равно | x != y |
> |
больше | x > y |
< |
меньше | x < y |
>= |
больше или равно | x >= y |
<= |
меньше или равно | x <= y |
Операторы сравнения используются для сравнения двух значений
Логические операторы
Символ | Имя | Описание | Пример |
---|---|---|---|
&& |
and логический |
возвращает true, если оба утверждения истинны | x < 5 && x < 10 |
` | ` | or logical |
|
! |
not logical |
Инвертирует результат, возвращает false, если true | !(x < 5 && x < 10) |
Примеры операторов
unsigned int a = 60; /*60 = 0011 1100 */
unsigned int b = 13; /*13 = 0000 1101 */
int c = 0;
c = a & b; /*12 = 0000 1100 */
printf("Строка 1 - значение c равно %d\n", c);
c = a | b; /*61 = 0011 1101 */
printf("Строка 2 - значение c равно %d\n", c);
c = a ^ b; /*49 = 0011 0001 */
printf("Строка 3 - значение c равно %d\n", c);
c = ~a; /*-61 = 1100 0011 */
printf("Строка 4 - значение c равно %d\n", c);
c = a << 2; /*240 = 1111 0000 */
printf("Строка 5 - значение c равно %d\n", c);
c = a >> 2; /*15 = 0000 1111 */
printf("Строка 6 - значение c равно %d\n", c);
Побитовые операторы
оператор | описание | экземпляр |
---|---|---|
& |
Оператор побитового AND, операция “AND” по двоичным цифрам | (A & B) даст 12 , что равно 0000 1100 |
` | ` | Оператор поразрядного ИЛИ, операция “или” по двоичным цифрам |
^ |
Оператор XOR, выполните операцию “XOR” по двоичным цифрам | (A ^ B) и получите 49 , что равно 0011 0001 |
~ |
Оператор инверсии, выполнить операцию “инверсия” по двоичным разрядам | (~A) получим -61 , что равно 1100 0011 |
<< |
оператор двоичного сдвига влево | A << 2 получим 240 , что равно 1111 0000 |
>> |
двоичный оператор правого сдвига | A >> 2 получит 15 , что равно 0000 1111 |
Типы данных
Основные типы данных
| Тип данных | Размер Размер | Диапазон Диапазон | Описание Описание | Описание
| —–| —–| —–| —–|
| char
| 1 байт | -128
~ 127
| одиночный символ/буквенно-цифровой/ASCII |
| signed char
| 1 байт | -128
~ 127
| -|
| беззнаковый char
| 1 байт | 0
~ 255
| -|
| int
| от 2
до 4
байт | -32,768
~ 32,767
| хранение целых чисел |
| | signed int
| 2 байта | -32,768
~ 32,767
| | |
| unsigned int
| 2 байта | 0
~ 65,535`` | | | | |
short int| 2 байта |
-32,768~
32,767| | | |
signed short int| 2 байта |
-32,768~
32,767| | | | ``unsigned short int`` | 2 байта |
0~
65,535| | | | `long int` | 4 байта | `-2,147,483,648` ~ `2,147,483,647` | | | | `signed long int` | 4 байта | `-2,147,483,648` ~ `2,147,483,647` | | | |
unsigned long int | 4 байта | `0` ~ `4,294,967,295
| | | |
| float
| 4 байта | 3.4E-38
~ 3.4E+38
| | | |
| | double
| 8 байт | 1.7E-308
~ 1.7E+308
| | | |
| | long double
| 10 байт | 3.4E-4932
~ 1.1E+4932
| | |
Типы данных
// создание переменных
int myNum = 5; // целое число
float myFloatNum = 5.99; // число с плавающей точкой
char myLetter = 'D'; // строка
// Данные или числа высокой точности с плавающей точкой
double myDouble = 3.2325467;
// печать выходных переменных
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);
printf("%lf\n", myDouble);
Тип данных | Описание |
---|---|
char |
символьный тип |
short |
короткое целое число |
int |
целочисленный тип |
long |
длинное целое число |
float |
тип с плавающей точкой одинарной точности |
double |
тип с плавающей точкой двойной точности |
void |
нет типа |
Основные спецификаторы формата
Спецификатор формата | Тип данных |
---|---|
%d или %i |
int целое число |
%f |
float десятичный тип с одинарной точностью |
%lf |
double данные или число высокой точности с плавающей точкой |
%c |
char символ |
%s |
для строк strings |
Основные спецификаторы формата
short | int | long | |
---|---|---|---|
Octal | %ho |
%o |
%lo |
Десятичная | %hd |
%d |
%ld |
Шестнадцатеричная | %hx /%hX |
%x /%X |
%lx /%lX |
Пример формата данных
int myNum = 5;
float myFloatNum = 5.99; // число с плавающей точкой
char myLetter = 'D'; // строка
// печать выходных переменных
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);
Препроцессор C
Директивы препроцессора
команда | описание |
---|---|
#define |
определить макрос |
#include |
включить файл исходного кода |
#undef |
неопределенный макрос |
#ifdef |
Возвращает true, если макрос определен |
#ifndef |
Возвращает true, если макрос не определен |
#if |
Компилирует следующий код, если заданное условие истинно |
#else |
Альтернатива #if |
#elif |
Если условие #if ложно, то текущее условие true . |
#endif |
Завершение блока условной компиляции #if...#else . |
#error |
Вывод сообщения об ошибке при возникновении стандартной ошибки |
#pragma |
Выдача специальных команд компилятору стандартным методом |
// заменить все MAX_ARRAY_LENGTH на 20
#define MAX_ARRAY_LENGTH 20
// Получить stdio.h из системной библиотеки
#include <stdio.h>
// Получить файл myheader.h из локального каталога
#include "myheader.h"
#undef FILE_SIZE
#define FILE_SIZE 42 // undefine и define to 42
Предопределенные макросы
макрос | описание |
---|---|
__DATE__ |
Текущая дата, символьная константа в формате “МММ ДД ГГГГ” |
__TIME__ |
Текущее время, символьная константа в формате “HH:MM:SS” |
__FILE__ |
Здесь будет содержаться имя текущего файла, строковая константа |
__LINE__ |
Здесь будет содержаться номер текущей строки, десятичная константа |
__STDC__ |
Определяется как 1 , если компилятор компилирует по стандарту ANSI . |
Стандарт ANSI C
определяет ряд макросов, которые можно использовать, но нельзя напрямую изменять эти предопределенные макросы
Пример предопределенного макроса
#include <stdio.h>
int main() {
printf("Файл :%s\n", __FILE__);
printf("Дата :%s\n", __DATE__);
printf("Время :%s\n", __TIME__);
printf("Строка :%d\n", __LINE__);
printf("ANSI :%d\n", __STDC__);
}
Оператор продолжения макроса ()
Макрос обычно записывается в одну строку.
#define message_for(a, b)\
printf(#a " и " #b ": Мы вас любим!\n")
Если макрос слишком длинный, чтобы уместиться в одной строке, используйте оператор продолжения макроса \
.
Оператор константизации строк (#)
#include <stdio.h>
#define message_for(a, b)\
printf(#a " и " #b ": Мы вас любим!\n")
int main(void) {
message_for(Carole, Debra);
return 0;
}
При компиляции и выполнении приведенного выше кода получается следующий результат:
Кэрол и Дебра: Мы вас любим!
Если необходимо преобразовать макропараметр в строковую константу, используйте оператор строковой константы #
.
Оператор вставки тега ### (##)
#include <stdio.h>
#define tokenpaster(n) printf("token" #n " = %d", token##n)
int main(void) {
int token34 = 40;
tokenpaster(34);
return 0;
}
defined() operator
#include <stdio.h>
#if !defined (MESSAGE)
#define MESSAGE "You wish!"
#endif
int main(void) {
printf("Вот сообщение: %s\n", MESSAGE);
return 0;
}
Параметризованные макросы
int square(int x) {
return x * x;
}
Макрос переписывает приведенный выше код следующим образом:
#define square(x) ( (x) * (x) )
Между именем макроса и открывающей круглой скобкой пробелы не допускаются
#include <stdio.h>
#define MAX(x,y) ( (x) > (y) ? (x) : (y) )
int main(void) {
printf("Максимальное значение между 20 и 10 равно %d\n", MAX(10, 20));
return 0;
}
C Function
Объявление и определение функции
int main(void) {
printf("Hello World!");
return 0;
}
Функция состоит из двух частей
void myFunction() { // объявление декларации
// тело функции (выполняемый код) (определение)
}
Декларация
объявляет имя функции, тип возврата и параметры (если таковые имеются).Определение
тело функции (код для выполнения)
// объявление функции
void myFunction();
// главный метод
int main() {
myFunction(); // --> вызов функции
return 0;
}
void myFunction() {// Определение функции
printf("Добрый вечер!");
}
Вызов функции
// создать функцию
void myFunction() {
printf("Добрый вечер!");
}
int main() {
myFunction(); // вызов функции
myFunction(); // может быть вызвана несколько раз
return 0;
}
// Output -> "Good evening!"
// Output -> "Good evening!"
Параметры функции
void myFunction(char name[]) {
printf("Hello %s\n", name);
}
int main() {
myFunction("Liam");
myFunction("Jenny");
return 0;
}
// Hello Liam
// Hello Jenny
Множественные параметры
void myFunction(char name[], int age) {
printf("Привет %s, тебе %d лет.\n",name,age);
}
int main() {
myFunction("Лиам", 3);
myFunction("Дженни", 14);
return 0;
}
// Привет Лиам, тебе 3 года.
// Привет, Дженни, тебе 14 лет.
Возвращаемое значение
int myFunction(int x) {
return 5 + x;
}
int main() {
printf("Результат: %d", myFunction(3));
return 0;
}
// выход 8 (5 + 3)
два параметра
int myFunction(int x, int y) {
return x + y;
}
int main() {
printf("Результат: %d", myFunction(5, 3));
// сохраняем результат в переменной
int result = myFunction(5, 3);
printf("Результат = %d", result);
return 0;
}
// result: 8 (5 + 3)
// result = 8 (5 + 3)
Рекурсивный пример
int sum(int k);
int main() {
int result = sum(10);
printf("%d", result);
return 0;
}
int sum(int k) {
if (k > 0) {
return k + sum(k -1);
} else {
return 0;
}
}
Математические функции
#include <math.h>
void main(void) {
printf("%f", sqrt(16)); // квадратный корень
printf("%f", ceil(1.4)); // округление в большую сторону (round)
printf("%f", floor(1.4)); // округление в большую сторону (round)
printf("%f", pow(4, 3)); // возведение x(4) в степень y(3)
}
abs(x)
абсолютное значениеacos(x)
значение косинуса дугиasin(x)
дуговой синусatan(x)
дуговой тангенсcbrt(x)
кубический кореньcos(x)
косинус- значение
exp(x)
экс sin(x)
синус x- тангенс угла
tan(x)
C Структуры
Создание структуры
struct MyStructure { // объявление структуры
int myNum; // член (переменная int)
char myLetter; // член (переменная char)
}; // завершение структуры точкой с запятой
Создадим переменную struct с именем s1
.
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
return 0;
}
Строки в структуре
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};
int main() {
struct myStructure s1;
strcpy(s1. myString, "Some text");
// вывести значение
printf("моя строка: %s", s1.myString);
return 0;
}
Присвоение значений строкам с помощью функции strcpy
Доступ к членам структуры
// создаем структуру myStructure
struct myStructure {
int myNum;
char myLetter;
};
int main() {
// Создаем переменную структуры myStructure с именем s1
struct myStructure s1;
// Присваиваем значения членам s1
s1.myNum = 13;
s1.myLetter = 'B';
// Создаем структурную переменную myStructure под названием s2
// и присваиваем ей значение
struct myStructure s2 = {13, 'B'};
// выводим значение
printf("Мое число: %d\n", s1.myNum);
printf("Моя буква: %c\n", s1.myLetter);
return 0;
}
Создание различных структурных переменных
struct myStructure s1;
struct myStructure s2;
// Присваиваем значения переменным различных структур
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
Копирование структуры
struct myStructure s1 = {
13, 'B', "Некоторый текст"
};
struct myStructure s2;
s2 = s1;
В примере значение s1
копируется в s2
Изменить значение
// Создаем переменную struct и присваиваем ей значение
struct myStructure s1 = {
13, 'B'
};
// изменяем значение
s1.myNum = 30;
s1.myLetter = 'C';
// выводим значение
printf("%d %c %s",
s1.myNum,
s1.myLetter);
обработка файла
Функция обработки файлов
функция | описание Описание |
---|---|
fopen() |
открытие нового или существующего файла |
fprintf() |
запись данных в файл |
fscanf() |
чтение данных из файла |
fputc() |
запись символа в файл |
fgetc() |
чтение символа из файла |
fclose() |
закрыть файл |
fseek() |
установить указатель файла на заданную позицию . |
fputw() |
Запись целого числа в файл |
fgetw() |
чтение целого числа из файла |
ftell() |
возвращает текущую позицию . |
rewind() |
установка указателя файла в начало файла |
В библиотеке языка Си имеется множество функций для открытия
/ чтения
/ записи
/ поиска
и закрытия
файлов
Параметр режима открытия
Режим Режим | Описание Описание |
---|---|
r |
Открыть текстовый файл в режиме чтения , позволяющем читать файл |
w |
Открыть текстовый файл в режиме записи , что позволяет производить запись в файл |
a |
Открыть текстовый файл в режиме append Если файл не существует, то будет создан новый |
r+ |
Открыть текстовый файл в режиме чтение-запись , позволяющем читать и записывать файл |
w+ |
Открыть текстовый файл в режиме чтение-запись , позволяющем читать и записывать файл |
a+ |
Открыть текстовый файл в режиме чтение-запись , разрешающем чтение и запись файла |
rb |
Открыть двоичный файл в режиме чтение . |
wb |
Открыть двоичный файл в режиме запись . |
ab |
Открыть двоичный файл в режиме append . |
rb+ |
Открыть двоичный файл в режиме чтение-запись |
wb+ |
Открыть двоичный файл в режиме чтение-запись |
ab+ |
Открыть двоичный файл в режиме чтение-запись |
Открыть файл: fopen()
#include <stdio.h>
void main() {
FILE *fp;
char ch;
fp = fopen("file_handle.c", "r");
while (1) {
ch = fgetc(fp);
if (ch == EOF)
break;
printf("%c", ch);
}
fclose(fp);
}
После выполнения всех операций над файлом его необходимо закрыть с помощью fclose()
.
Запись в файл: fprintf()
#include <stdio.h>
void main() {
FILE *fp;
fp = fopen("file.txt", "w"); // открыть файл
// запись данных в файл
fprintf(fp, "Hello file for fprintf..\n");
fclose(fp); // закрываем файл
}
Чтение файла: fscanf()
#include <stdio.h>
void main() {
FILE *fp;
char buff[255]; // Создание массива char для хранения данных файла
fp = fopen("file.txt", "r");
while(fscanf(fp, "%s", buff) != EOF) {
printf("%s ", buff);
}
fclose(fp);
}
Запись в файл: fputc()
#include <stdio.h>
void main() {
FILE *fp;
fp = fopen("file1.txt", "w"); // открываем файл
fputc('a',fp); // запись одного символа в файл
fclose(fp); // закрываем файл
}
Чтение файла: fgetc()
#include <stdio.h>
#include <conio.h>
void main() {
FILE *fp;
char c;
clrscr();
fp = fopen("myfile.txt", "r");
while( (c = fgetc(fp) ) != EOF) {
printf("%c", c);
}
fclose(fp);
getch();
}
Запись в файл: fputs()
#include<stdio.h>
#include<conio.h>
void main() {
FILE *fp;
clrscr();
fp = fopen("myfile2.txt", "w");
fputs("hello c programming",fp);
fclose(fp);
getch();
}
Чтение файлов: fgets()
#include<stdio.h>
#include<conio.h>
void main() {
FILE *fp;
char text[300];
clrscr();
fp = fopen("myfile2.txt", "r");
printf("%s", fgets(text, 200, fp));
fclose(fp);
getch();
}
fseek()
#include <stdio.h>
void main(void) {
FILE *fp;
fp = fopen("myfile.txt", "w+");
fputs("Это книга", fp);
// Устанавливаем указатель файла в заданную позицию
fseek(fp, 7, SEEK_SET);
fputs("Kenny Wong", fp);
fclose(fp);
}
установить указатель файла в заданную позицию
перемотка()
#include <stdio.h>
#include <conio.h>
void main() {
FILE *fp;
char c;
clrscr();
fp = fopen("file.txt", "r");
while( (c = fgetc(fp) ) != EOF) {
printf("%c", c);
}
rewind(fp); // перемещение указателя файла в начало файла
while( (c = fgetc(fp) ) != EOF) {
printf("%c", c);
}
fclose(fp);
getch();
}
// вывод
// Hello World! Hello World!
ftell()
#include <stdio.h>
#include <conio.h>
void main () {
FILE *fp;
int length;
clrscr();
fp = fopen("file.txt", "r");
fseek(fp, 0, SEEK_END);
length = ftell(fp); // возврат текущей позиции
fclose(fp);
printf("Размер файла: %d байт", length);
getch();
}
// вывод
// размер файла: 18 байт