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

Ввод только чисел в cin>>value - C++

Восстановить пароль Регистрация
 
Negent
 Аватар для Negent
9 / 9 / 1
Регистрация: 01.11.2011
Сообщений: 21
22.06.2014, 12:14     Ввод только чисел в cin>>value #1
Доброго времени суток!
Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть больше понимания, как работает кусок кода (программа рабочая).
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Эта программа добивается ввода чисел, вместо всякой ерунды
#include <iostream>
#include "stdafx.h"
using namespace std;
 
void main ()
{
    int Ar[5];
    int value;
    for (int i=0; i<5; i++)
    {
        cout<<"Ar["<<i+1<<"]: ";
        cin>>value;
        while (!cin)
        {
            cout<<"Enter again A["<<i+1<<"]: ";
            cin.clear ();
            while (cin.get ()!= '\n') continue;
            cin>>value;
        }
        Ar[i] = value;
    }
    cout<<"Exit!"<<endl;
    for (int i=0; i<5; i++)
    cout<<"A["<<i+1<<"]: "<<Ar[i]<<endl;
    system ("pause");
}
А именно, вот этот кусок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i=0; i<5; i++)
    {
        cout<<"Ar["<<i+1<<"]: ";
        cin>>value;
        while (!cin)
        {
            cin.clear ();
            while (cin.get ()!= '\n') continue;
            cout<<"Enter again A["<<i+1<<"]: ";
            cin>>value;
        }
        Ar[i] = value;
    }
Проверьте пожалуйста, ход рассуждений (только это, переписывать ничего не надо в коде!):
1. Ввод значения во временную переменную "value".
2. Если введённое значение не подходит, то в очереди потока в cin, выставляется флаг, имеющий значение "ложь", что даёт запуск цикла "while". (истина = не-ложь)
3. Цикл "while (!cin)" операторами в теле цикла: cin.clear() очищает очередь символов , а while (cin.get()) выполняет сброс символа новой строки столько раз, пока они там есть. Continue выполняет новую и новую итерацию, пока там ещё есть символы новой строки. Сам cin.clear () не может выполнить очистку на символы новой строки.
4. Производится считывание временной переменной "value", если оно истинно, т.е. введено корректное значение (число), то флаг в условии цикла while (!cin) равен "истина".
5. Число присваивается элементу массива. При наличии корректного ввода, происходит выполнение цикла for (), без циклов while()
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2014, 12:14     Ввод только чисел в cin>>value
Посмотрите здесь:

C++ Ввод в консоле только чисел(запрет ввода других символов)
как осуществить ввод только нечетных целых чисел? C++
как осуществить ввод только чисел C++
Ввод через cin нескольких чисел C++
Ввод cin C++
C++ ввод только чисел
C++ Как разрешить ввод только чисел типа int?
Фильтр на ввод только целых неотрицательных чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
22.06.2014, 12:50     Ввод только чисел в cin>>value #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не совсем верно.
После неправильного ввода состояние потока становится ошибочным и дальнейший ввод из него невозможен.
cin.clear() - Сбрасывает состояние потока, делая его вновь доступным для ввода, при этом не очищает очередь символов.
В данном случае цикл:
C++
1
while (cin.get ()!= '\n') continue;
используется для очистки очереди символов.
cin.get() - читает 1 символ из потока, когда cin.get() считает символ '\n' - это будет означать что в потоке больше нет символов.
Yandex
Объявления
22.06.2014, 12:50     Ввод только чисел в cin>>value
Ответ Создать тему
Опции темы

Текущее время: 14:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru