// Создание файла
out_stream.open("Integers.txt");
for (count = 1; count <= 5; count++)
out_stream << number++ << ' ';
out_stream.close();
// Подсчет количества целых чисел в файле
in_stream1.open("Integers.txt");
count = 0;
in_stream1 >> number;
while (!in_stream1.eof())
{
50
count++;
in_stream1 >> number;
}
in_stream1.close();
cout << "В файле хранится " << count << " целых чисел,\n";
// Подсчет количества символов, не являющихся разделителями
in_stream2.open("Integers.txt");
count = 0;
in_stream2 >> character;
while (!in_stream2.eof())
{
count++;
in_stream2 >> character;
}
in_stream2.close();
cout << "представленных с помощью " << count << " символов.\n";
return 0;
}
Программа 7.1.
Программа 7.1 выведет на экран следующие сообщения:
В файле хранится 5 целых чисел,
Представленных с помощью 10 символов.
При подсчете символов в последней части программы 7.1 снова обратите вни-
мание на то, что, в отличие от функции "get(...)", оператор ">>" игнорирует в файле
Пробелы (которые разделяют пять целых чисел).
Сводка результатов
В лекции рассмотрены способы работы с текстовыми файлами с помощью по-
|
|
токов ввода/вывода. "Низкоуровневый" ввод/вывод выполняется с помощью функций
"get(...)" и "put(...)", а "высокоуровневый" ввод/вывод значений разных типов – с
помощью потоковых операторов ">>" и "<<".
Упражнения
Упражнение 1
Напишите программу, печатающую на экране содержимое собственного ис-
ходного файла на Си++.
Упражнение 2
Разработайте программу, которая (1) начинается с оператора вывода тестового
сообщения:
cout << "Проверка: " << 16/2 << " = " << 4*2 << ".\n\n";
и затем (2) копирует собственный исходный файл на Си++ в файл
"WithoutComments.cpp" и на экран, при этом пропуская все комментарии между
маркерами "/*... */" (и маркеры комментариев тоже).
51
Получившийся файл "WithoutComments.cpp" должен компилироваться и ра-
Ботать точно так же, как и исходная программа.
Подсказки: (1) вам может пригодиться функция " putback() "; (2) для отслежива-
Ния состояния, находитесь ли вы внутри комментария или нет, можете применить
логический "флаг".
Упражнение 3
Напишите программу, которая подсчитывает и выводит на экран количество
Символов (включая пробелы) в собственном исходном файле.
Упражнение 4
Без использования массива (массивы будут рассмотрены в 6-й лекции) напи-
Шите программу, которая печатает на экране собственный исходный файл в обратном
Порядке.
Подсказки: (1) Для начальной части этой программы может пригодиться програм-
Ма из упражнения 3. (2) Будьте внимательны и не используйте поток ввода после
|
|
Ошибки – вместо этого работайте с новым потоком.
Примечание: не беспокойтесь, если перед началом печати происходит небольшая
Задержка – открытие и закрытие файлов требует некоторого времени.
Упражнение 5
Что выведет на экран следующая программа?
#include <iostream.h>
#include <fstream.h>
Int main()
{
char character;
int integer;
ofstream out_stream;
ifstream in_stream;
// Создание текстового файла и запись в него двух целых чисел
out_stream.open("Integers.txt");
out_stream << 123 << ' ' << 456;
out_stream.close();
// Попытка чтения из только что созданного файла
// "Integers.txt" символа, затем целого числа,
// затем снова символа, затем опять целого числа.
in_stream.open("Integers.txt");
in_stream >> character >> integer;
cout << "символ: '" << character << "'\n";
cout << "целое число: " << integer << "\n";
in_stream >> character >> integer;
cout << "символ: '" << character << "'\n";
cout << "целое число: " << integer << "\n";
in_stream.close();
return 0;
}
52
ЛЕКЦИЯ 5. Операторы ветвления и циклы
Логические значения, выражения и функции
В этой лекции подробно рассматриваются операторы ветвления ("if" и
"switch") и операторы циклов "for" и "while". Для применения всех этих операто-
Ров необходимо хорошо знать, что такое логические выражения и как они вычисля-
Ются.
Язык Си++ унаследовал от языка Си соглашение, согласно которому целое
значение 0 считается логическим "false" (ложное значение), а ненулевое целое – ло-
гическим "true" (истинным значением). Но выражения вроде
условие1 == 1
Или
условие2 == 0
Не слишком удобны при чтении теста программ человеком. Было бы лучше записы-
вать логические выражения в интуитивно понятном виде:
условие1 == true
и
условие2 == false
Поэтому в Си++ был добавлен специальный логический тип "bool". Перемен-
ные типа "bool" могут принимать значения "true" и "false", которые при необхо-
Димости автоматически преобразуются в выражениях в значения 1 и 0.
Тип данных "bool" можно использовать в программах точно так же, как и ти-
пы "int", "char" и др. (например, для описания переменных или для создания функ-
ций, возвращающих значения типа "bool").
Программа 1.1 приведена в качестве примера использования типа данных
"bool". Она запрашивает с клавиатуры возраст кандидата, сдававшего некий тест, и
Полученную кандидатом оценку в баллах. Затем программа оценивает результат вы-
Полнения теста по шкале, зависящей от возраста кандидата и делает вывод о том, сдан
Тест или нет. Для кандидатов до 14 лет порог сдачи теста составляет 50 баллов, для 15
Или 16 лет – 55 баллов, старше 16-ти лет – 60 баллов.
#include <iostream.h>
bool acceptable(int age, int score);
Int main()
{
int candidate_age, candidate_score;
cout << "Введите возраст кандидата: ";
cin >> candidate_age;
cout << "Введите результат тестирования: ";
cin >> candidate_score;
If (acceptable(candidate_age, candidate_score))
cout << "Этот кандидат сдал тест успешно.\n";
Else
cout << "Этот кандидат тест не прошел.\n";
53
return 0;
}
// Функция оценки результата тестирования: тест сдан/не сдан
Bool acceptable(int age, int score)
{
if (age <= 14 && score >= 50)
return true;
else if (age <= 16 && score >= 55)
return true;
else if (score >= 60)
return true;
Else
return false;
}
Программа 1.1.
2. Циклы "for", "while" и "do...while"
Циклы "for" впервые встречались во 2-й лекции, цикл "while" упоминался в
4-й лекции. Любой цикл "for" можно переписать в виде цикла "while" и наоборот.