Ввід при відсутності даних
Символи, які не несуть смислового навантаження, - пропуски і '\n' – звичайно пропускаються при вводі даних. Це може призвести до деяких небажаних побічних ефектів. Наприклад, користувач замість введення значення може просто випадково натиснути Enter, вважаючи, що тим самим вводить нуль або просто заплутавшись. Раніше приведений код, так само, як і вираз
cin>>i;
після натиску клавіші Enter приведе до переходу курсора на новий рядок в той час, як потік все ще очікуватиме введення даних. В чому проблема з переходом курсора в новий рядок? Справа в тому, що, не побачивши адекватної реакції на свої дії, користувач може вирішити, що компютер вийшов з ладу. Крім того, повторний натиск клавіші Enter зсуватиметься все нижче, а це може призвести до цілковитої плутанини на екрані.
Таким чином, важливо дати команду вхідному потоку не ігнорувати розділювачі. Це робиться за допомогою прапора skipws.
cout<<”\nВведіть ціле число: “;
cin.unset(ios::skipws); //не ігнорувати розділювачі
cin>>i;
if(cin.good())
{//помилок нема}
//помилка
Тепер, якщо користувач натисне Enter, забувши ввести дані, то буде встановлений прапор failbit і тим самим згенерована ознака помилки. Після цього можна попросити користувача ввести дані повторно.
Дата добавления: 2015-08-26; просмотров: 574;