Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Целые числа


Автор: кипр 15.12.2006, 20:51
Прошу помощи!!!!
У меня есть часть программы :если введен символ,а надо целое число,нужно чтобы программа выводила ошибку и сразу же предлагала ввести целое число заново.Я не могу понять как именно она работает?Что значат cin.fail,  cin.clear();,   cin.ignore(256,'\n'); (если можно расшифруйте пожалуйста)?
Возможно есть другой вариант решения этой задачи?
           cout << "Enter array[" << i << "]: ";
           cin >> ar[i];
                while(cin.fail())
              {
                 cin.clear();
                 cin.ignore(256,'\n');
                 cout << "ERROR! Enter integer.\n";
                 cout << "Enter array[" << i << "]: ";
                 cin >> ar[i];
              }
    Заранее выражаю благодарность. smile 

Автор: mr.Anderson 15.12.2006, 20:56
cin.fail() - то есть цикл работает до тех пор, пока во входном потоке есть ошибочный символ. Ошибочным он будет как раз тогда, когда вводится символ, так как элемент массива - число целого типа. При введении символа возникает несовпадение типов, и, как следствие, ошибка, которая и обрабатывается функцией fail().
cin.clear() - очистка входного потока.
cin.ignore() - игнорирование по всей длине потока символов переноса строки.

Автор: Dov 15.12.2006, 21:08
sim7,  smile 
Всё правильно, молодец. 

Автор: mr.Anderson 15.12.2006, 21:55
smile Спасибо... Вот не ожидал. Я ж чисто по логике работал. smile 

Автор: кипр 15.12.2006, 22:07
 smile А почему в cin.ignore именно число 256? smile 

Автор: Dov 15.12.2006, 22:20
Цитата(кипр @  15.12.2006,  21:07 Найти цитируемый пост)
А почему в cin.ignore именно число 256?

кипр, ну, напиши 255 или 250, какая разница. Можешь даже 999 написать, не жалко.  smile 

Автор: V.A.KeRneL 16.12.2006, 02:38
std::cin.ignore() can be called three different ways: 

   1. No arguments: A single character is taken from the input buffer and discarded: 
      std::cin.ignore(); //discard 1 character
   2. One argument: The number of characters specified are taken from the input buffer and discarded: 
      std::cin.ignore(33); //discard 33 characters
   3. Two arguments: discard the number of characters specified, or discard characters up to and including the specified delimiter (whichever comes first): 
      std::cin.ignore(26, '\n'); //ignore 26 characters or to a newline, whichever comes first

http://www.augustcouncil.com/~tgibson/tutorial/iotips.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)