Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти наименьшую четную цифру. Если ее нет, возвратить 0 http://www.cyberforum.ru/cpp-beginners/thread1214277.html
1). Найти наименьшую четную цифру. Если ее нет, возвратить 0. помогите пожалуйста
C++ Перегрузка бинарного оператора + Выдает ошибку: Ошибка 2 error LNK1120: неразрешенных внешних элементов: 1 Main\Debug\Main.exe 1 Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "class Class __cdecl operator+(class... http://www.cyberforum.ru/cpp-beginners/thread1214265.html
Найти количество чисел, составленных из цифр a, b, c C++
//На отрезке (210<N<231) найти количество чисел, составленных из цифр a,b,c. //Использовать подпрограмму, которая на вход получает N,a,b,c а выдает количество интересующих чисел в виде массива...
Работа с файлами, вставка в середину документа и навигация в нем с fseek C++
Товарищи, доброго вам дня. Столкнулся вот с такой проблемой. fseek не переносит указатель в нужную часть документа. int set_pos(struct DATABASE &db,int file,unsigned int pos) { int ERR=0;...
C++ Подскажите как переписать класс с использованием умных указателей, либо STL http://www.cyberforum.ru/cpp-beginners/thread1214196.html
К сожалению, знания об умных указателях и библиотеке STL прошли мимо меня... Сейчас пытаюсь восполнить этот пробел, но уже третий день не могу понять как этим пользоваться. Очень прошу помочь мне,...
C++ где ошибка в программе подскажите здравствуйте помогите плиз. каждую входящую "*" должно менять на "??"(считывается из файла)но выдает чепуху что в файле забито #include<iostream> #include<fstream> #include<string> int n,i;... подробнее

Показать сообщение отдельно
Negent
9 / 9 / 1
Регистрация: 01.11.2011
Сообщений: 21

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

22.06.2014, 12:14. Просмотров 1168. Ответов 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()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru