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

Ввод только чисел в 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 Class &,class Class &)" (??H@YA?AVClass@@AAV0@0@Z) в функции _main Main\Main\Main.obj #pragma once #include <iostream> using namespace std; class Class{ public: http://www.cyberforum.ru/cpp-beginners/thread1214265.html
Найти количество чисел, составленных из цифр a, b, c C++
//На отрезке (210<N<231) найти количество чисел, составленных из цифр a,b,c. //Использовать подпрограмму, которая на вход получает N,a,b,c а выдает количество интересующих чисел в виде массива символов. #include<iostream> using namespace std; void rec(long long int s, long long int n, int a, int b, int c, int &res) { long long tmp=s*10+a; //проверяем переменную составленную из...
Работа с файлами, вставка в середину документа и навигация в нем с fseek C++
Товарищи, доброго вам дня. Столкнулся вот с такой проблемой. fseek не переносит указатель в нужную часть документа. int set_pos(struct DATABASE &db,int file,unsigned int pos) { int ERR=0; switch(file) { case 0: ERR=fseek(db.index,pos,SEEK_SET); if(ERR<0) {return -1;} // Ошибка db.pos_index=pos;
C++ Подскажите как переписать класс с использованием умных указателей, либо STL http://www.cyberforum.ru/cpp-beginners/thread1214196.html
К сожалению, знания об умных указателях и библиотеке STL прошли мимо меня... Сейчас пытаюсь восполнить этот пробел, но уже третий день не могу понять как этим пользоваться. Очень прошу помочь мне, показав, как описанный ниже класс перевести на умные указатели, или на векторы: class test { private: int Amount; int x;
C++ где ошибка в программе подскажите здравствуйте помогите плиз. каждую входящую "*" должно менять на "??"(считывается из файла)но выдает чепуху что в файле забито #include<iostream> #include<fstream> #include<string> int n,i; using namespace std; void main() {setlocale(0,""); ifstream in("D:\\1.txt"); if(!in){cout«"Ошибка!."«endl; system("pause");} подробнее

Показать сообщение отдельно
Negent
 Аватар для Negent
9 / 9 / 1
Регистрация: 01.11.2011
Сообщений: 21
22.06.2014, 12:14     Ввод только чисел в cin>>value
Доброго времени суток!
Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть больше понимания, как работает кусок кода (программа рабочая).
Код:
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()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru