![]() |
Помощь с кодом на С++
Ребята при изучении С++ возникли множество вопросов. И вот одни из них (привожу для начала код функции):
int fill_array(double ar[], int limit) { using namespace std; double temp; int i; for (i=0; i<limit; i++) { cout << "Enter value # " << (i+1) << endl; cin >> temp; if (!cin) { cin.clear(); while (cin.get() != '\n') continue; cout << "Bad input; input process terminated.\n"; break; } else if (temp<0) break; ar[i] = temp; } return i; } В общем это функция с именем fill_array куда передается массив и число означающее предел заполнения массива. В функции используется защита от неправильного вода (!cin) и от заполнения массива отрицательными числами (if (temp<0)....). Тело функции main где используется fill_array думаю не стоит приводить. Так вот вопросы: - оператор continue который используется в циклах для возврата в начало цикла, в данном случае он множество раз возвращает в начало while или всетаки for? - оператор break (первый) как я понимаю он в циклах типа for переводит управление на последнюю фигурную скобку, т.е если до него дойдет то он прерывает for и не дает заполнить массив (управление не доходит до ar[i]=temp) или всетаки операция break выводит из if на else if (temp<0). Поправте если ошибаюсь: строки while (cin.get() != '\n') continue; - как я понимаю они означают проходку по всем символам "неправильным" которые ввел юзер до символа новой строки (enter?) и стирания с помощью cin.clear()?. Плюс, если есть возможность объясните конкретнo как в циклах (в условиях проверки) работаю cin, или cin.get(), получается что в условиях проверки они превращаются в булевы типы, но непонятно успевают ли они присваивать значения массивам или операндам. ну например while (cin >> n) {тело цикла} - вот в этом примере в консоле по идее должно появится запрос на вод n, допустим вел букву d согласно теории это "неправильный вод" и в цикл while мы не входим, но вот позже если попытаться вызвать n он должен быть заполнен d или он должен быть пустой? |
PHP код:
Это довольно распространенная ошибка, отформатировать код "на глаз" пропустив скобки, а потом думать о том "что пошло не так"? В данном случае, т.к. continue относится к while, то он и будет продолжать итерацию в while. То же самое касается break - он завершает текущую итерацию цикла. Цикл какой? Правильно - счетный for. Его и завершаем. Цитата:
cin.get() и его друзья ---- Я полагаю правильное изучение С++ сложным для новичка. Чтобы вы в дальнейшем не "прострелили себе ногу", посмотрите на другие, более явные что ли, языки программирования. Но это чистое ИМХО разумеется. |
Спасибо)) :)
|
Плюс еще кое-что. Товарищ lxa85
Во первых, код был взят из книги (насколько мне известно) американского профессора Stephen Prata, и как мне кажется американцы будуче умнее русских и более продвинутые в создании высоких технологии знают о чем писать для обучения и передачи данных своим ученикам. Тут даже на беглый взгляд можно разглядеть их непомерный энтузиазм. Во вторых, если у вас нет возможности не плюнуть в других при оказании псевдопомощи, то я со всей ответственностью прошу Вас в темы созданные мною больше не писать, и далее, этот ваш "не выпендривайтесь" можете засунуть себе в задницу и там хорошенько законсервировать. Возможно Вы можете отметить для себя, что в тексте моего сообщения небыло вопроса как мне оформлять код, там небыло имени конкретного пользователя у которого я спрашиваю ответа. Тот кто может нормально ответить тот и отвечает, смекаете? Я надеюсь, что у меня максимально хорошо вышло передать основную идею претензия по вашему ответу. Еще раз спасибо :) |
Уважаемы arlekon.
Я ценю Ваш юношеский максимализм, спасибо, позабавили. Мое "не выпендривайтесь" было обращено к "молодым специалистам" "в целом". Т.к. до тех пор, пока они не могут четко ориентироваться, между оператором и составным оператором, им лучше писать синтаксические конструкции полностью. Банально проще и полезней. Сохраняет множество нервов. ;) При использовании полных синтаксических конструкций у вас скорей всего не возникло бы проблем с операторами прерывания цикла. Равно как и при использовании полного и грамотного форматирования. Мне проще указать на систематическую ошибку, которая в дальнейшем может привести к печальным результатам и осложнениям в усвоении материала, тем более такого не простого, как С++. К сожалению, я не могу подтвердить исходник за авторством уважаемого Стефана Прата (Stephen Prata). В данном случае эти строки публикуете Вы, следовательно Вы несете за них ответ. Что касается авторитета автора строк, то в рунете бытует мнение, что и Бьерн Страуструп (Bjarne Stroustrup) (создатель языка С++, казалось бы куда уж "круче") дает "ложные" и "опасные" примеры, поэтому его книга не рекомендована к начальному обучению. Цитата:
---- У меня за плечами чуть больше опыта подготовки программистов и чтения лекций юным адептам. Нюни 25 летнего парня, выглядят смешно. Мне жаль. |
Вот это:
Цитата:
Цитата:
Цитата:
Ну а это: Цитата:
|
arlekon, хотите путать "теплое" с "мягким" - путайте, я вам мешать не стану.
|
Время: 22:26. |
Время: 22:26.
© OSzone.net 2001-