Оператор do while

Задания раздела 5.4.4
5.18. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) do
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1+v2 << endl;
while (cin);
(b) do {
// ...
} while (int ival=get_response());
(c) do {
int ival=get_response();
} while (ival);
5.19. Напишите программу, использующую цикл do while для циклического запроса у пользователя двух строк и указания, которая из них меньше другой.

5.4.4


Оператор do while это то же самое что и while, только тело цикла будет выполнено хотя бы один раз, так как условие проверяется после выполнения тела.
do {
оператор
} while (условие);

Так как условие не обрабатывается до окончания оператора, определять в условии используемые в блоке операторов переменные нельзя.

5.18. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) do
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1+v2 << endl;
while (cin);

(a) do { // добавлю фигурные скобки обозначить блок операторов
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1+v2 << endl;
} while (cin);
(b) do {
// ...
} while (int ival=get_response());

(b)
int ival; // определить переменную необходимо до условия
do {
// ...
} while (ival=get_response());

(c) do {
int ival=get_response();
} while (ival);

(c)
int ival; /* так же использовать в условии переменную, определенную в блоке операторов, нельзя */
do {
ival=get_response();
} while (ival);

5.19. Напишите программу, использующую цикл do while для циклического запроса у пользователя двух строк и указания, которая из них меньше другой.

#include <iostream>
#include <string>
int main()
{
std::string c;
do {
std::string s, s1;
std::cout << "Enter 1st string:" << std::endl;
getline (std::cin, s);
std::cout << "Enter 2st string:" << std::endl;
getline (std::cin, s1);
if (s<s1) std::cout << "1st string less then 2nd"<< std::endl;
else if (s1<s) std::cout << "2st string less then 1nd" << std::endl;
else std::cout << "strings are equal"<< std::endl;
std::cout << "more strings to compare? y/n: ";
getline(std::cin, c); std::cout << std::endl;
} while (!c.empty() && c[0]!='n');
return(0);
}

Дополнительный гемор, который меня настиг, присутствовал в способе запроса переменной c. Сначала я написал std::cin >> c; и оказалось что enter после ввода переменной записывался в строку s и запрос сразу переходил к вводу второй строки. Исправив на getline (std::cin, c) проблема решилась. Получается раз начал использовать getline, пожалуйте и дальше его использовать.

Добавить комментарий