Программирование. Принципы и практика использования C++ Исправленное издание, стр. 396
Функция
scanf()printf()printf()void f(){ int i; char c; double d; char* s = (char*)malloc(100); /* считываем данные в переменные, передаваемые как указатели: */ scanf("%i %c %g %s", &i, &c, &d, s); /* спецификатор %s пропускает первый пробел и прекращает действие на следующем пробеле */}
printf()scanf()s%sgets()scanf("%s")
char buf[20];scanf("%19s",buf);Нам требуется участок памяти, заканчивающийся нулем (содержание которого вводится функцией
scanf()bufПроблема с функцией
scanf()getchar()getchar()while((x=getchar())!=EOF) { /* ... */}Макрос
EOFstdioАльтернативы функций
scanf("%s")gets()string s;cin >> s; // считываем словоgetline(cin,s); // считываем строку27.6.3. Файлы
В языке C (и C++) файлы можно открыть с помощью функции
fopen()fclose()FILEEOF<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; }}