Шрифт:
string s;
cin >> s; // считываем слово
getline(cin,s); // считываем строку
27.6.3. Файлы
В языке C (и C++) файлы можно открыть с помощью функции
fopen
, а закрыть — с помощью функции fclose
. Эти функции, вместе с представлением дескриптора файлов FILE
и макросом EOF
(конец файла), описаны в заголовочном файле <stdio.h>
.
FILE *fopen(const char* filename, const char* mode);
int fclose(FILE *stream);
По существу, мы используем файлы примерно так:
void f(const char* fn, const char* fn2)
{
FILE* fi = fopen(fn, "r"); /* открываем файл fn для чтения */
FILE* fo = fopen(fn2, "w"); /* открываем файл fn для записи */
if (fi == 0) error("невозможно открыть файл для ввода");
if (fo == 0) error("невозможно открыть файл для вывода");
/* чтение из файла с помощью функций ввода из библиотеки stdio,
например, getc */
/* запись в файл с помощью функций вывода из библиотеки stdio,
например, fprintf */
fclose(fo);
fclose(fi);
}
Учтите: в языке С нет исключений, потому вы не можете узнать, что при обнаружении ошибок файлы были закрыты.
27.7. Константы и макросы
В языке С константы не являются статическими.
const int max = 30;
const int x; /* неинициализированная константа: OK в C
(ошибка в C++) */
void f(int v)
{
int a1[max]; /* ошибка: граница массива не является константой
(OK в языке C++) */
/* (слово max не допускается в константном
выражении!) */
int a2[x]; /* ошибка: граница массива не является константой */
switch (v) {
case 1:
/* ... */
break;
case max: /* ошибка: метка раздела case не является
константой
(OK в языке C++) */
/* ... */
break;
}
}
По техническим причинам в языке С (но не в языке C++) неявно допускается, чтобы константы появлялись из других модулей компиляции.
/* файл x.c: */
const int x; /* инициализирована в другом месте */
/* файл xx.c: */
const int x = 7; /* настоящее определение */
В языке С++ в разных файлах могут существовать два разных объекта с одним и тем же именем
x
. Вместо использования ключевого слова const
для представления символьных констант программисты на языке С обычно используют макросы. Рассмотрим пример.
#define MAX 30
void f(int v)
{
int a1[MAX]; /* OK */
switch (v) {
case 1:
/* ... */
break;
case MAX: /* OK */
/* ... */
break;
}
}
MAX
заменяется символами 30
, представляющими собой значение этого макроса; иначе говоря, количество элементов массива a1
равно 30
, а меткой второго раздела case является число 30
. По общепринятому соглашению имя макроса MAX
состоит только из прописных букв. Это позволяет минимизировать ошибки, вызываемые макросами. 27.8. Макросы