|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помощь с кодом на С++ |
|
C/C++ - Помощь с кодом на С++
|
Новый участник Сообщения: 5 |
Ребята при изучении С++ возникли множество вопросов. И вот одни из них (привожу для начала код функции):
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 или он должен быть пустой? |
|
Отправлено: 14:15, 03-09-2016 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать
continue - Чтобы быть уверенным где цикл начался, а где закончился - пишите операторные скобки и, пардон, не выпендривайтесь. Это довольно распространенная ошибка, отформатировать код "на глаз" пропустив скобки, а потом думать о том "что пошло не так"? В данном случае, т.к. continue относится к while, то он и будет продолжать итерацию в while. То же самое касается break - он завершает текущую итерацию цикла. Цикл какой? Правильно - счетный for. Его и завершаем. Цитата arlekon:
cin.get() и его друзья ---- Я полагаю правильное изучение С++ сложным для новичка. Чтобы вы в дальнейшем не "прострелили себе ногу", посмотрите на другие, более явные что ли, языки программирования. Но это чистое ИМХО разумеется. |
|
------- Отправлено: 08:25, 07-09-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо))
![]() |
Отправлено: 19:53, 07-09-2016 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Плюс еще кое-что. Товарищ lxa85
Во первых, код был взят из книги (насколько мне известно) американского профессора Stephen Prata, и как мне кажется американцы будуче умнее русских и более продвинутые в создании высоких технологии знают о чем писать для обучения и передачи данных своим ученикам. Тут даже на беглый взгляд можно разглядеть их непомерный энтузиазм. Во вторых, если у вас нет возможности не плюнуть в других при оказании псевдопомощи, то я со всей ответственностью прошу Вас в темы созданные мною больше не писать, и далее, этот ваш "не выпендривайтесь" можете засунуть себе в задницу и там хорошенько законсервировать. Возможно Вы можете отметить для себя, что в тексте моего сообщения небыло вопроса как мне оформлять код, там небыло имени конкретного пользователя у которого я спрашиваю ответа. Тот кто может нормально ответить тот и отвечает, смекаете? Я надеюсь, что у меня максимально хорошо вышло передать основную идею претензия по вашему ответу. Еще раз спасибо ![]() |
Последний раз редактировалось arlekon, 11-09-2016 в 17:14. Отправлено: 17:02, 11-09-2016 | #4 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Уважаемы arlekon.
Я ценю Ваш юношеский максимализм, спасибо, позабавили. Мое "не выпендривайтесь" было обращено к "молодым специалистам" "в целом". Т.к. до тех пор, пока они не могут четко ориентироваться, между оператором и составным оператором, им лучше писать синтаксические конструкции полностью. Банально проще и полезней. Сохраняет множество нервов. ![]() При использовании полных синтаксических конструкций у вас скорей всего не возникло бы проблем с операторами прерывания цикла. Равно как и при использовании полного и грамотного форматирования. Мне проще указать на систематическую ошибку, которая в дальнейшем может привести к печальным результатам и осложнениям в усвоении материала, тем более такого не простого, как С++. К сожалению, я не могу подтвердить исходник за авторством уважаемого Стефана Прата (Stephen Prata). В данном случае эти строки публикуете Вы, следовательно Вы несете за них ответ. Что касается авторитета автора строк, то в рунете бытует мнение, что и Бьерн Страуструп (Bjarne Stroustrup) (создатель языка С++, казалось бы куда уж "круче") дает "ложные" и "опасные" примеры, поэтому его книга не рекомендована к начальному обучению. Цитата arlekon:
---- У меня за плечами чуть больше опыта подготовки программистов и чтения лекций юным адептам. Нюни 25 летнего парня, выглядят смешно. Мне жаль. |
||
------- Отправлено: 21:24, 11-09-2016 | #5 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Вот это:
Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
Ну а это: Цитата lxa85:
![]() |
||||
Последний раз редактировалось arlekon, 13-09-2016 в 18:35. Отправлено: 18:23, 13-09-2016 | #6 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать arlekon, хотите путать "теплое" с "мягким" - путайте, я вам мешать не стану.
|
Отправлено: 21:54, 13-09-2016 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Можно ли, (.bat) кодом создать сылку / "shortcut" на файл | ufooo | Скриптовые языки администрирования Windows | 1 | 05-06-2015 13:56 | |
CMD/BAT - [решено] Как (.bat) кодом отыскать и скопировать файл на рабочий стол | ufooo | Скриптовые языки администрирования Windows | 2 | 12-05-2015 20:44 | |
C/C++ - Помогите с кодом с++ | Nerest | Программирование и базы данных | 7 | 29-07-2014 14:36 | |
Select с HTML кодом | vadimiron | Вебмастеру | 10 | 19-02-2007 11:34 | |
помогите с кодом | armag | Вебмастеру | 4 | 06-05-2006 22:51 |
|