Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помощь с кодом на С++

Ответить
Настройки темы
C/C++ - Помощь с кодом на С++

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ребята при изучении С++ возникли множество вопросов. И вот одни из них (привожу для начала код функции):

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

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

int fill_array(double ar[], int limit) {
  
using namespace std;  // так ли оно здесь нужно?
  
double temp;
  
int i;
  for (
0limiti++) {
    
cout << "Enter value # " << (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;


continue - Чтобы быть уверенным где цикл начался, а где закончился - пишите операторные скобки и, пардон, не выпендривайтесь.
Это довольно распространенная ошибка, отформатировать код "на глаз" пропустив скобки, а потом думать о том "что пошло не так"?
В данном случае, т.к. continue относится к while, то он и будет продолжать итерацию в while.
То же самое касается break - он завершает текущую итерацию цикла. Цикл какой? Правильно - счетный for. Его и завершаем.
Цитата arlekon:
Поправте если ошибаюсь: строки while (cin.get() != '\n') continue; - как я понимаю они означают проходку по всем символам "неправильным" которые ввел юзер до символа новой строки (enter?) и стирания с помощью cin.clear()?. »
Не все там так просто
cin.get() и его друзья

----
Я полагаю правильное изучение С++ сложным для новичка. Чтобы вы в дальнейшем не "прострелили себе ногу", посмотрите на другие, более явные что ли, языки программирования. Но это чистое ИМХО разумеется.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 08:25, 07-09-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо))

Отправлено: 19:53, 07-09-2016 | #3


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Плюс еще кое-что. Товарищ lxa85
Во первых, код был взят из книги (насколько мне известно) американского профессора Stephen Prata, и как мне кажется американцы будуче умнее русских и более продвинутые в создании высоких технологии знают о чем писать для обучения и передачи данных своим ученикам. Тут даже на беглый взгляд можно разглядеть их непомерный энтузиазм. Во вторых, если у вас нет возможности не плюнуть в других при оказании псевдопомощи, то я со всей ответственностью прошу Вас в темы созданные мною больше не писать, и далее, этот ваш "не выпендривайтесь" можете засунуть себе в задницу и там хорошенько законсервировать. Возможно Вы можете отметить для себя, что в тексте моего сообщения небыло вопроса как мне оформлять код, там небыло имени конкретного пользователя у которого я спрашиваю ответа. Тот кто может нормально ответить тот и отвечает, смекаете?
Я надеюсь, что у меня максимально хорошо вышло передать основную идею претензия по вашему ответу. Еще раз спасибо

Последний раз редактировалось arlekon, 11-09-2016 в 17:14.


Отправлено: 17:02, 11-09-2016 | #4


Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Уважаемы arlekon.
Я ценю Ваш юношеский максимализм, спасибо, позабавили.
Мое "не выпендривайтесь" было обращено к "молодым специалистам" "в целом". Т.к. до тех пор, пока они не могут четко ориентироваться, между оператором и составным оператором, им лучше писать синтаксические конструкции полностью. Банально проще и полезней. Сохраняет множество нервов.
При использовании полных синтаксических конструкций у вас скорей всего не возникло бы проблем с операторами прерывания цикла. Равно как и при использовании полного и грамотного форматирования.
Мне проще указать на систематическую ошибку, которая в дальнейшем может привести к печальным результатам и осложнениям в усвоении материала, тем более такого не простого, как С++.

К сожалению, я не могу подтвердить исходник за авторством уважаемого Стефана Прата (Stephen Prata). В данном случае эти строки публикуете Вы, следовательно Вы несете за них ответ.
Что касается авторитета автора строк, то в рунете бытует мнение, что и Бьерн Страуструп (Bjarne Stroustrup) (создатель языка С++, казалось бы куда уж "круче") дает "ложные" и "опасные" примеры, поэтому его книга не рекомендована к начальному обучению.
Цитата arlekon:
как мне кажется американцы будуче умнее русских и более продвинутые в создании высоких технологии знают о чем писать для обучения и передачи данных своим ученикам. »
Я бы не был столь категоричен в суждениях. Люди везде одинаковые, а ИТ развиваются столь стремительно, что нет возможности лет 5-10 отработать технологии обучения.
----
У меня за плечами чуть больше опыта подготовки программистов и чтения лекций юным адептам. Нюни 25 летнего парня, выглядят смешно. Мне жаль.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 21:24, 11-09-2016 | #5


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот это:
Цитата lxa85:
юношеский максимализм »
обосновано этим:
Цитата lxa85:
Мое "не выпендривайтесь" »
. Я не просил развернутое сочинение, по теме
Цитата lxa85:
У меня за плечами чуть больше опыта подготовки программистов и чтения лекций юным адептам. Нюни 25 летнего парня, выглядят смешно. Мне жаль. »
типовая песня которую возможно услышать от преподов за +50. К тому же возраст не может быть 100% гарантией адекватности и правоты человека.
Ну а это:
Цитата lxa85:
Люди везде одинаковые, а ИТ развиваются столь стремительно, что нет возможности лет 5-10 отработать технологии обучения. »
это сводит на нет последние надежды услышать от Вас что-то профессиональое, ибо минимум социология, анатомия, генетика, психофизиология намекают нам что есть между людьми небольшие отличия . А нахождение (min) таких компании как Intel, Microsoft Corporation, NVIDIA Corporation на территории Америки забивают последний гвоздь.....

Последний раз редактировалось arlekon, 13-09-2016 в 18:35.


Отправлено: 18:23, 13-09-2016 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


arlekon, хотите путать "теплое" с "мягким" - путайте, я вам мешать не стану.

Отправлено: 21:54, 13-09-2016 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помощь с кодом на С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход