- •1. Краткие теоретические сведения
- •1.4. Пустой оператор
- •1.5. Составной оператор (блок)
- •1.6. Операторы начала и конца программы
- •Int main()
- •1.7. Оператор return
- •1.8. Оператор присваивания
- •1.8.1. Множественное присваивание
- •1.8.2. Ошибки при присваивании
- •1.8.3. Не путайте операторы равенства и присвоения
- •1.8.4. Составные операторы присвоения
- •1.8.6. Присваивание значения при объявлении
- •1.9. Операторы ввода-вывода
- •1.10. Функции ввода и вывода
- •1.10.1. Функция printf
- •1.10.2. Функция scanf
- •1.11. Операторы потокового ввода и вывода
- •1.11.1. Использование cout для отображения вывода на экран
- •1.11.2. Использование cout для вывода чисел
- •1.11.3. Вывод нескольких значений одновременно
- •1.11.4. Использование специальных символов вывода
- •1.11.5. Другие специальные символы
- •1.11.5. Вывод восьмеричных и шестнадцатеричных значений
- •1.11.6. Вывод на стандартное устройство ошибок
- •1.11.7. Управление шириной вывода
- •1.11.8. Директива #define
- •1.11.9. Оператор потокового вывода cin
- •1.11.10. Второе знакомство с cin
- •1.11.11. Следите за ошибками переполнения
- •1.11.12. Следите за ошибками несовпадения типов
- •1.11.13. Чтение символьных данных
- •1.11.14. Чтение слов с клавиатуры
- •1.11.15. Чтение строковых данных
- •1.12. Комментарии. Использование пробелов
- •1.13. Линейный вычислительный процесс
- •1.16. Таблица выбора идентификаторов
- •2. Задание
- •2.10. Задания
- •2.10.1. Задание 1
- •2.10.2. Задание 2
- •2.10.3. Задание 3 (домашнее)
- •3. Выводы
- •4. Требование к отчету
- •5. Вопросы для самоконтроля
- •Литература
- •Оглавление
1.11.12. Следите за ошибками несовпадения типов
Как уже обсуждалось, программа LR5-26.cpp предполагает, что пользователь вводит значение в диапазоне от -32768 до 32767. Если вместо ввода числа вне этого диапазона, пользователь вводит буквы или другие символы, то возникает другая ошибка — ошибка несовпадения типов. Другими словами, программа ожидала значение одного типа (int), а пользователь ввел значение другого типа (char). Для примера запустите программу второй раз. Когда программа запросит число, введите буквы АВС. Как и раньше, возникнет ошибка, поскольку программа ожидает целое число, а не буквы.
Выполните подобные эксперименты с программой LR5-27.cpp, вводя бессмысленные значения или числа с плавающей точкой. Вы обнаружите, что программа наталкивается на те же ошибки. В последующих уроках вы научитесь выполнять операции ввода таким образом, чтобы уменьшить возможность подобных ошибок. А сейчас просто помните, что такие ошибки могут возникать.
1.11.13. Чтение символьных данных
Обе предыдущие программы использовали cin для чтения целых чисел в переменные типа int. Следующая программа LR5-28.cpp в примере 5.28 использует входной поток cin для чтения символов с клавиатуры. Как видите, программа читает символ в переменную типа char.
Пример 5.28
/*Программа LR5-Primer28*/
#include <iostream.h>
#include<conio.h>
int main()
{
char letter;
cout << "Введите любой символ и нажмите Enter: ";
cin >> letter;
cout << "Был введен символ " << letter << endl;
getch();
return 0;
}
Откомпилируйте и поэкспериментируйте с данной программой, вводя более одного символа и наблюдая за реакцией программы. Вы обнаружите, что программа каждый раз работает только с одним символом.
Тестирование:
и
1.11.14. Чтение слов с клавиатуры
Во второй части данной книги вы научитесь сохранять слова или даже строки текста в одной переменной. Там же вы узнаете, как использовать входной поток cin для чтения слов и целых строк. А сейчас можете создать свою собственную простую программу, которая читает значения типа float или long. Например, следующая программа LR5-29.cpp использует cin для чтения значения типа long.
Пример 5.29
/*Программа LR5-Primer29*/
#include<iostream.h>
#include<conio.h>
int main()
{
long value;
cout << "Введите большое число и нажмите Enter: ";
cin >> value;
cout << "Было введено число " << value << endl;
getch();
return 0;
}
Тестирование:
и
Как и раньше, поэкспериментируйте с этой программой, вводя очень большие числа (и отрицательные тоже).
1.11.15. Чтение строковых данных
В случае если в приемник должна быть введена строка символов, ввод продолжается до первого символа пробела или ввода Enter:
char String[80];
cin >> String;
Так, при вводе строки "Да здравствует С++!" переменная String воспримет только подстроку "Да". Остальная часть строки останется в буфере до тех пор, пока в программе не встретится следующий оператор ввода.
Ниже показано, как ввод одной строки с символом пробела "12345 67890" разделяется и заполняет две совершенно разные переменные – Stringl и String2.
Пример 5.30
/*Программа LR5-Primer30*/
#include<iostream.h>
#include<conio.h>
int main()
{
char Stringl[80];
char String2[80];
cout << "Input string: ";
cin >> Stringl;
cout << Stringl << 1\n1;
cout « "Input string: ";
cin >> String2;
cout << f\nr << String2 << f\n';
getch();
return 0;
}
Тестирование:
В результате работы программы получим, например:
Input string: 12345 67890 12345
Input string: 67890
Как видно из примера, строка символов вводилась лишь один раз, хотя в программе оператор ввода встречается дважды. При этом первые пять вводимых символов были помещены в переменную Stringl, а последующие символы - в переменную String2.
После изучения оператора потокового ввода cin Вы должны освоить следующие основные концепции:
Вы можете использовать входной поток cin для присваивания определенным переменным символов и чисел, введенных с клавиатуры;
при применении cin для чтения и присваивания переменной значения, введенного с клавиатуры, можно использовать содержимое переменной так, как если бы ваша программа использовала оператор присваивания для сохранения значения в переменной;
когда ваша программа использует cin для выполнения ввода с клавиатуры, остерегайтесь ошибок переполнения и ошибок, возникающих при вводе пользователем значения неверного типа.
Замечание: перенаправление ввода/вывода
Как уже обсуждалось, выходной поток cout соответствует стандартному выводу операционной системы. Подобным образом входной поток cin соответствует стандартному вводу операционной системы. Как уже отмечалось ранее, если Ваши программы используют выходной поток cout, пользователь может перенаправить вывод программы с экрана дисплея в файл или на принтер. В результате, если ваша программа использует cin для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. В последующих лабораторных работах Вы научитесь писать программы, которые читают и обрабатывают перенаправленный ввод.