arlekon
03-09-2016, 14:15
Ребята при изучении С++ возникли множество вопросов. И вот одни из них (привожу для начала код функции):
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 или он должен быть пустой?
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 или он должен быть пустой?