Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР5-С++-22 марта-2012.doc
Скачиваний:
12
Добавлен:
15.09.2019
Размер:
1.48 Mб
Скачать

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 для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. В последующих лабораторных работах Вы научитесь писать программы, которые читают и обрабатывают перенаправленный ввод.