Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Ввод символов до некоторого ограничителя




 

int main(){ 

char ch;                        

cout << "Input char (end - x)\n ";

do {                           

   cout << ":";    //приглашение к вводу

   cin >> ch;      //ввод символа завершаем нажатием <enter>

} while (ch!= 'x');            //(в данном случае до символа х)

cout << " <x> -- end " << endl;

_getch();               //ждет ввода символа и нажатия <enter>

return 0;

}

или

while (( ch = getche() )!= '\r') //пока не нажата клавиша <enter>

  { if ch == ' ' …..

else ……}

 

функции С:

getchar() – ждет ввода символа и нажатия <enter>   

getche() – вводит символ c эхо и не ждет <enter>

-----------------------------------------------------------------------------------------

обработка исключений (особых ситуаций в программе) [8]

Термин «исключение» подразумевает, что при выполнении программы, «как правило», операторы исполняются корректно, а проблемная ситуация (возникновение ошибки) является «исключением из правила». Средства языка, рассматриваемые ниже, предоставляют программистам возможность создавать приложения, способные разрешать (обрабатывать) исключительные ситуации. Обработка исключений позволяет вынести код обработки ошибок из «генеральной линии» выполнения программы. Это улучшает ясность программы и упрощает внесение в нее изменений.

Управление исключениями в С++ предлагает для обработки ошибок стандартный механизм:

• в блок try помещается программный код, в котором может возникнуть исключительная ситуация;

• в блоке catch, располагающемся непосредственно после связанного с ним блока try, находится программный код, обрабатывающий исключение (информацию о возникшей ошибке;

• оператор throw прерывает исполнение программы и передает управление связанному с ним блоку catch (если с данным оператором не связан блок catch, то управление передается стандартному модулю библиотеки MFC, выводящему сообщение об ошибке и завершающему выполнение данного приложения.

Схематически структуру программы, использующей механизм исключений, можно представить следующим образом:

                                      // проверка исключения

try

{

.....

if (…..)

throw;          // вызов исключения

.....

}

             // обработка исключения

catch (...)

{

.....

}

В данном примере открывается блок try и в нем выполняются некоторые операции. В условном операторе if проверяется условие вызова исключения. Если это условие выполняется, то оператор throw вызывает исключение и передает управление блоку catch, в котором и производится обработка данного исключения. Если это условие не выполняется и программа доходит до конца блока try, то следующий за ним блок catch не выполняется.

Каждый обработчик начинается ключевым словом catch и специфицирует (в круглых скобках) параметр исключения, представляющий тип исключений, которые могут обслуживаться данным обработчиком. Когда в try-блоке возникает исключение, исполняется тот catch-обработчик, тип которого согласуется с типом данного исключения (т.е. тип в catch-блоке совпадает с типом возникшего исключения). Если исключений в try-блоке не происходит, программа игнорирует все его catch-обработчики.

Если в блоке try вызывается некоторая функция, содержащая оператор throw, не заключенный в блок try, то оператор throw действует в этой функции как оператор return и управление передается в связанный с данным блоком try блок catch.

Если оператор throw в некоторой функции не заключен в блок try и вызов этой функции, также, не заключен в блок try, то исключение передается по всей иерархии вызывающих функций, пока не будет достигнута функция, вызов которой заключен в блок try. После чего выполняется описанная выше процедура. Если во всей иерархии функций ни одна из них не заключена в блок try, то приложение выдает сообщение об ошибке.

 

Следующий пример демонстрирует использование механизма исключений («правильный» ввод двух целых чисел и вычисление результата их деления; если второе число или результат равны 0, то генерируется исключение).

 

# include <iostream> //включение заголовков для ввода/вывода в поток в стиле С++

using namespace std; //подключение стандартного пространства имен              

 

int main()

{

int  numerator;        // числитель

int  denominator;      // знаменатель

int result=99999999;

    

Try

{

cout << "Enter two integers: ";

                            // цикл обеспечивает «правильный» ввод

while(! (cin >> numerator) ||! (cin >> denominator))

{

     cout << "Enter two integers: ";

         

     cin.clear();       //сбрасываем флаги состояния потока ввода cin.ignore(cin.rdbuf()->in_avail()); //очищаем поток ввода
  }

    

if (denominator == 0)

     throw " The denominator is 0    ";
                             // перейти на обработку исключения    

         

                          // получить результат

result = numerator / denominator;

                       

  // если numerator < denominator, то result ==0, т.к. тип int

if (result == 0)

     throw "The quotient is 0    "; // перейти на обработку исключения

    

cout << "The quotient is: " << result << endl; // все ОК

 

} // конец try

                        // обработчик всех исключений

catch (const char * s)

{

cout << "Exception occurred: " << s << numerator << " " <<
denominator << " " << result << endl;

} // конец catch

    

system("pause");

return 0;         // нормальное завершение

}

 

Программа предлагает пользователю ввести два целых числа и проверяет ввод.

Обработчик catch специфицирует в круглых скобках параметр исключения – строку. Обычно catch-обработчик сообщает пользователю об ошибке, регистрирует ее в файле, аккуратно завершает программу или избирает альтернативную стратегию выполнения неудавшейся операции. В данном примере catch-обработчик просто сообщает о том, что возможно деление на 0 или результат равен 0 и выводит значения переменных.

Размещение любого кода между try-блоком и соответствующими ему catch-обработчиками является синтаксической ошибкой.

Каждый catch-обработчик может иметь лишь один параметр — спецификация списка разделенных запятыми параметров исключения является синтаксической ошибкой.

Перехват одного и того же типа в двух различных catch-обработчиках одного try-блока является логической ошибкой.

Стратегию управления исключениями необходимо предусматривать в программе с самого начала процесса её проектирования. Включение управления исключениями в программу после её реализации может быть затруднительно.

 

результат:
Enter two integers: 1   q

Enter two integers: q   2

Enter two integers: 1.2   3

Enter two integers: 3    4.2

Exception occurred: The quotient is 0      3 4 0 Объяснить!!!

 

Enter two integers: 1   4

Exception occurred: The quotient is 0      1 4 0 Объяснить!!!

 

Enter two integers: 4   0

Exception occurred: The denominator is 0     4 0 99999999  Объяснить!!!

 

Enter two integers: 4  2

The quotient is: 2

-----------------------------------------------------------------------------------------

Программы с использованием условия  (задание 2.2)

Даны вещественные числа a, b, c, d. Если a £ b £ c £ d, то каждое число заменить наибольшим, если a > b > c > d, то числа оставить без изменений, в противном случае – все числа заменить их квадратами.

int main()

{

Double a, b, c, d;

 

printf(" Input a, b, c, d:\n");

scanf_s("%lf %lf %lf %lf", &a, &b, &c, &d);

printf("a = %lf; b = %lf; c = %lf; d = %lf;\n", a, b, c, d);

if (a <= b && b <= c && c <= d)      

{a = d; b = d; c = d;}                                          

else if (a > b && b > c && c > d)

         ; // ничего не делать!!!

else {a = a * a; b = b * b; c = c * c;}

printf("a = %lf; b = %lf; c = %lf; d = %lf; \n ", a, b, c, d);

_getch();

return 0;

}

-----------------------------------------------------------------------------------------





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 171 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лаской почти всегда добьешься больше, чем грубой силой. © Неизвестно
==> читать все изречения...

4153 - | 3996 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.