Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
#1

Почему необходимо применять cin.get() - C++

10.12.2011, 00:19. Просмотров 636. Ответов 2
Метки нет (Все метки)

Почему необходимо применять cin.get() ? В книге Липмана вообще не упоминается cin.get(), а без неё идёт бесконечный вывод строки ошибки

Есть ли способ избежать множественного повторения вывода строки ошибки, если ,например, долнжно введено быть целочисленное значение, а когда ввожу например adsdasdsa, то он столько раз повторяет строку ошибки, сколько недопустимых значений я ввёл (((
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned bolsh;
while(std::cin >> bolsh, !std::cin.eof()){
    if (std::cin.fail()){
  std::cerr << "Ошибка! Введите целое число: " << std::flush;
  std::cin.clear();
  std::cin.get();
  continue;
}
    std::cout << "TestResult";
    break;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2011, 00:19     Почему необходимо применять cin.get()
Посмотрите здесь:

Почему функцию sqrt нельзя применять к int переменным, а только к double и flot? - C++
Почему функцию sqrt нельзя применять к int переменным, а только к double и float? Извините за опечатку в названии темы.

Почему не происходит ввод? (cin) - C++
Здравствуйте. Скажите, пожалуйста, почему нету приглашения ввести переменную s? int main() { cout&lt;&lt;&quot;Enter digits, for exit...

Почему игнорируется cin.getline() в классе? - C++
Вот конструктор класса. При вызове конструктора создаётся односвязный список и данные вводятся с клавиатуры. Почему-то не работает функция...

Почему не определяются cout, cin, endl, system? - C++
int i,n,k1,k2; float min,s=0; cout&lt;&lt;&quot; n=&quot;; cin&gt;&gt;n; float* a=new float ; cout&lt;&lt;&quot; Enter elements: &quot;; ...

cin получил char вместо double и while зациклился. Почему? - C++
Привет! Решил задачу из книги Шилдта. &quot;Годы Юпитера в Земные&quot; Захотел проверить, что произойдет, если пользователь ошибется и вместо...

Почему портится поток cin при использовании функции getline - C++
char a; cin.getline(a,5); cin.clear(); При вводе свыше 5 символов после функции getline надо вызывать функцию clear() иначе...

Почему с помощью std::cin не получается считать с клавиатуры массив пользовательского типа? - C++
Доброго времени суток! Нашёл приме объвления класса комп. чисел и выполнения основных операций. Я пытал преобразовать коод таким образом,...

Объясните, почему окно закрывается даже при cin.get(); хотя код правильный? - C++
Ладно если не сложно ответе мне пожалуйста почему в данном коде выделяет ошибкой #include &lt;iostream&gt; using namespace std; int main() ...

при некорректном вводе cin далее уже не принимает ввод, не понимаю почему? - C++
В условии if (cin &gt;&gt; A &gt;&gt; B) {...} при некорректном вводе cin далее уже не принимает ввод, не понимаю почему. Вот строчки int main() ...

Почему cin не смогла обработать ESC, а getche() смогла? - C++
С cin ничего не вышло, а getche распознала. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class tollBooth { ...

Почему clear необходимо использовать до seekg? - C++
...и нельзя сразу после? Долго не могла решить проблему пока не наткнулась на тему где f.clear() шел до f.seekg(). И мне стало интересно))...

Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? - C++
Сабж. Ну, то есть есть класс, что-то такое: #include &lt;iostream&gt; using namespace std; class arr { public: explicit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.12.2011, 12:28     Почему необходимо применять cin.get() #2
Будет проще, если ты скажешь какой алгоритм ты хочешь реализовать

А так на первый взгляд написана полная фигня
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
10.12.2011, 15:38  [ТС]     Почему необходимо применять cin.get() #3
odip,

"Ошибка! Введите целое число: "

Вот эта строка бесконечно выводится на стандартном устройстве вывода, если я ввожу недопустимое значение (например литеральную строку или литеральный символ, кроме целых чисел).

Что же происходит с потоком ? Почему если я уберу std::cin.get() , то у меня появляется это недоразумение, и почему при новой итерации цикла (с помощью оператора continue) не просит ещё раз ввести со стандартном устройства ввода в переменную bolsh ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru