- •Выполнить для структурной переменой перегрузку операторов ввода/ вывода в стандартный поток внешними функциями. (л.20) стр.14
- •Как проверить состояние стандартного потока ввода? (л.20) стр. 15-16
- •Как избежать переполнения строки-приемника при вводе символьных строк? (л.20) стр. 15-16
- •Определить собственный манипулятор для форматирования вывода переменных вещественного типа, включающий не менее 5 операций форматирования? (л.20)стр. 29
- •Как сделать текстовый файл на примере последовательности случайных чисел (в редакторе и в программе)? (л.20, пример 2) стр. 32-34, 51
- •Как сделать бинарный файл на примере последовательности случайных чисел (в редакторе и в программе)? (л.20, пример 9) стр. 35-36, 52
- •Как записать в бинарный файл и прочитать из него массив, 3 структурные переменные, массив из 3 структур? (л.20, пример 10) стр. 53
- •Почему при неправильной организации чтения из файла последняя запись может повторяться 2 раза? (л.20)
- •Как обеспечить возможность повторного чтения только что прочитанного файла? (л.20)
- •Привести пример использования функций peek(), ignore(), putback().(л.20) ignore – 12,47 peek – 46,47 putback - 47
- •Как передать имя файла в качестве параметра функции main()? (л.20, примеры 5, 12)
- •Как сохранить при обработке файла невидимые символы и отредактировать их? (л.20, пример 6)
- •Как передать файл в функцию? (л.20, пример 7) примеры стр.2-3
- •Как сделать массив файлов и записать туда что-то? (л.20, пример 8) примеры стр.17
- •Как определить количество записей в бинарном файле и выполнить их корректировку? (л.20, пример 14)
Действия компилятора при выполнении операторов cout << k; (int k;) и cout << d; (double d;)? (л.20) стр.13
Компилятор преобразует эти переменные в текстовый вид, а программа кидает их в выходящий поток, и выводятся на экран значения k и значение d
Выполнить для структурной переменой перегрузку операторов ввода/ вывода в стандартный поток внешними функциями. (л.20) стр.14
struct complex {
float re, im;
}; //определение структурного типа
ostream& operator <<(ostream& os, const complex& cc ); //прототип функции перегрузки вывода
istream& operator >>( istream& is, complex& cc ); //прототип функции перегрузки ввода
int main()
{complex c1, c2; //определение комплексных чисел
cin >>c1; //ввод чисел istream& operator>> (istream&, complex& cc);
cin >> c2; //operator>> (cin, с2);
cout << c1; //вывод чисел ostream& operator<< (ostream&, const complex& cc);
cout << c2; // operator<< (cout, с2);
_getch();
return 0;
}
ostream& operator << (ostream& os, const complex& cc ) //внешняя функция
{ os << cc.re << " " << cc.im << endl; //поля в struct открыты
return os;
}
istream& operator >>( istream& is, complex& cc ) //внешняя функция
{ is >> cc.re >> cc.im ;
return is;
}
Как проверить состояние стандартного потока ввода? (л.20) стр. 15-16
Состояния потока
проверка успешности открытия потока:
ifstream inFile ("d:\\TEST.TXT"); //поток открыт для чтения
if (!inFile) {cerr <<"error"; _getch(); exit(1);}
ifstream ifbin ("TEST.bin", ios::binary);
if (!ifbin) {cerr <<"error"; _getch(); exit(1);}
Любой поток (и стандартные в том числе) в каждый момент времени находится в некотором состоянии. Эти состояния имеют названия good, bad, fail и eof (end-of-file). Состояния определены в классе ios_base как целые статические константы:
typedef T2 iostate;
static const iostate badbit;
static const iostate eofbit;
static const iostate failbit;
static const iostate goodbit;
Эти константы называют флагами состояния потока. Значения флагов зависят от реализации, однако имена определены в стандарте. Тип T2 в typedef-объявлении зависит от реализации, но обычно это один из целых типов. В программе имена флагов записываются с префиксом класса, например, std::ios_base::eofbit. Вместо префикса ios_base можно использовать класс, производный от ios_base. В частности, в текстах программ стандартной библиотеки обычно используется более короткий префикс ios::, например std::ios::eofbit.
Методы работы с флагами (методы, работающие с битами состояния, описаны в пункте 27.4.4 стандарта):
iostate rdstate() const; // чтение всех флагов
void setstate( iostate flag ); // установка всех флагов
void clear( iostate state = goodbit ); // очистка всех флагов
Если при вызове метода аргумент отсутствует, очищаются все флаги состояния. При задании аргумента после очистки всех флагов устанавливаются указанные флаги. Для установки нескольких флагов пользуются битовыми операциями:
std::ios::eofbit | std::ios::failbit
Определены методы, с помощью которых можно определить состояние потока:
bool good() const; // следующая операция может выполняться
bool eof() const; // виден конец ввода
bool fail() const; // следующая операция не выполняется
bool bad() const; // поток испорчен