|
Программирование >> Инициализация объектов класса, структура
bool it = false; ... while ( ! quit ) { ... it = do something (); string word; Условием может быть любое выражение: while ( cin >> word ){ ... } while ( symbol *ptr = search( name )) { что-то сделать или объявление с инициализацией: В последнем случае ptr видим только в блоке, соответствующем инструкции while, как это было и для инструкций for и switch. Вот пример цикла while, обходящего множество элементов, адресуемых двумя int sumit( int *parray begin, int *parray end ) { int sum = 0; if ( ! parray begin ! parray end ) return sum; while ( parray begin != parray end ) прибавить к sum и увеличить указатель sum += *parray begin++; return sum; int ia[6] = { 0, 1, 2, 3, 4, 5 }; int main() int sum = sumit( &ia[0], &ia[ 6 ] ); ... указателями: Для того чтобы функция sumit() выполнялась правильно, оба указателя должны адресовать элементы одного и того же массива (parray end может указывать на элемент, следующий за последним). В противном случае sumit() будет возвращать бессмысленную величину. Увы, С++ не гарантирует, что два указателя адресуют один и 3. Если самое первое вычисление условия дает false, инструкция не выполняется. while ( vector<int>::iterator iter != ivec.end() ) ... while ( ptr = 0 ) ptr = find a value(); while ( bool status = find( word )) { word = get next word(); if ( word.empty() ) break; ... if ( ! status ) ... cout << Слов не найдено\n ; Упражнение 5.12 while обычно применяется для циклов, выполняющихся, пока некоторое условие истинно, например, читать следующее значение, пока не будет достигнут конец файла. for обычно рассматривается как пошаговый цикл: индекс пробегает по определенному диапазону значений. Напишите по одному типичному примеру for и while, а затем измените их, используя цикл другого типа. Если бы вам нужно было выбрать для постоянной работы только один из этих типов, какой бы вы выбрали? Почему? Упражнение 5.13 Напишите функцию, читающую последовательность строк из стандартного ввода до тех пор, пока одно и то же слово не встретится два раза подряд либо все слова не будут обработаны. Для чтения слов используйте while; при обнаружении повтора слова завершите цикл с помощью инструкции break. Если повторяющееся слово найдено, напечатайте его. В противном случае напечатайте сообщение о том, что слова не повторялись. тот же массив. Как м1 увидим в главе 12, стандартные универсальные алгоритмы реализованы подобным же образом, они принимают параметрами указатели на первый и последний элементы массива. Упражнение 5.11 string bufString, word; while ( cin >> bufString >> word ) Какие ошибки допущены в следующих циклах while: инструкция таков: while ( условие ); инструкция выполняется до первой проверки условия. Если вычисление условия дает false, цикл останавливается. Вот как выглядит предыдущий пример с использованием do { val = getValue(); val = convertValue(val); printValue(val); цикла do while: } while doMore(); В отличие от остальных инструкций циклов, do while не разрешает объявлять объекты в ошибка: объявление переменной в условии не разрешается do { mumble( foo ); своей части условия. Mi не можем написать: } while ( int foo = get foo() ) ошибка 5.8. Инструкция do while Представим, что нам надо написать программу, переводящую мили в километры. int val; bool more = true; фиктивное значение, нужное для начала цикла while ( more ) { val = getValue(); val = convertValue(val); printValue(val); more = doMore() ; Структура программы выглядит так: Проблема заключается в том, что условие вычисляется в теле цикла. for и while требуют, чтобы значение условия равнялось true до первого вхождения в цикл, иначе тело не выполнится ни разу. Это означает, что м1 должны обеспечить такое условие до начала работы цикла. Альтернативой может служить использование do while, гарантирующего выполнение тела цикла хотя бы один раз. Синтаксис цикла do while
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |