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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 160, средняя оценка - 4.75
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
#1

Проверка ввода целого числа - C++

17.02.2009, 03:54. Просмотров 20606. Ответов 8
Метки нет (Все метки)

Помогите разобраться, плиз... есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using std::endl;
using std::cout;
using std::cin;
 
void main()
{
int i;
cout << "Enter integer value" << endl;
cin >> i;
}
Как отловить ошибку ввода целочисленного числа максимально стандартными средствами? Можно ли это сделать не подключая другие библиотеки? Ищу самое простое решение... Заранее спасибо всем
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2009, 03:54     Проверка ввода целого числа
Посмотрите здесь:

Фильтр для ввода целого числа в данном диапазоне - C++
# include &lt;iostream&gt; # include &lt;locale&gt; using namespace std; int main () { setlocale (LC_ALL,&quot;Russian&quot;); int number; ...

Исключения. Проверка на правильность введения целого числа - C++
Надо сделать в программе несколько исключений. Одно из них должно срабатывать если вместо числа(int) будет введено число с точкой(float,...

Проверка на корректность ввода числа - C++
Здравствуйте. Помогите решить данную проблему. Есть длинное число, хочу проверить, чтобы вводились только числа. Функция ввода: ...

Проверка правильности ввода числа - C++
Здравствуйте. Помогите с функцией проверки ввода на число. Число любое (целое, дробное).

Проверка правильности ввода числа - C++
Всем привет! Прошу помочь с такой задачей: Дано число в двоичной системе счисления. Проверить правильность ввода этого числа (в его...

Проверка ввода двузначного числа - C++
как сделать проверку ввода что число действительно двузначное, а не какое либо другое? #include &lt;iostream&gt; #include &lt;windows.h&gt; ...

В вызывающей функции main() организовать контроль ввода положительного целого K, большего 0 - C++
В общем такая задачка: Составить функцию, которая вычисляет сумму К слагаемых В вызывающей функции main() организовать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.02.2009, 11:11     Проверка ввода целого числа #2
Все что ты вводишь в консоли только потом с помощью обычных операций скрыто приводится к нужному тебе типу. Поэтому можешь сделать это сам, например, проверить, что введенная строка не содержит никаких запрещенных символов.
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 15:09  [ТС]     Проверка ввода целого числа #3
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x;                            
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
    cin >> x;        
    if(cin.good())
    {
        cout << "Вы ввели значение " << x << endl; 
        success = true;
    }
    else    
    {
        cout << "Значение введено неверно. Повторите ввод" << endl;
    }
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 22:15     Проверка ввода целого числа #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
ммм...я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
18.02.2009, 23:07     Проверка ввода целого числа #5
так немножко проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main()
{
 
 
     int input;
 
     cout << "Введите число" << endl;
     cin >> input;
     if(!cin.fail())
      cout << "Введено целое число: " << input << endl
             << "Бит ошибки потока равен: " << cin.fail()<< endl;
 
     else
      cout <<"Введена кракозябра"<< " :)\n"
             << "Бит ошибки потока равен: " << cin.fail() << endl;
}
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
20.02.2009, 02:00  [ТС]     Проверка ввода целого числа #6
Цитата Сообщение от Юляшка Посмотреть сообщение
я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Где именно тебе не понятно что я делаю?
Night_Light
17 / 17 / 2
Регистрация: 14.02.2009
Сообщений: 86
20.02.2009, 10:33     Проверка ввода целого числа #7
Цитата Сообщение от voff4igg Посмотреть сообщение
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x; 
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
char input[10];
int value = INT_MIN;
cout << "Введите число" << endl;
cin >> input;
value = atoi(input);
cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
попробуй присваивать false флагу success при неверном вводе

Добавлено через 9 минут 33 секунды
Цитата Сообщение от voff4igg Посмотреть сообщение

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
http://www.cplusplus.com/reference/c...dlib/atoi.html
> If no valid conversion could be performed, a zero value is returned.
Поставь проверку на ноль результата вызова atoi(input).
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
20.02.2009, 14:40     Проверка ввода целого числа #8
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
#include <iostream>
using namespace std;
 
void main()
{
int x;                              
bool success = false;  
  
system("chcp 1251");  
  
cout << "Введите значение" << endl;   
while(!success)  
{  
    cin >> x ;          
    if(cin.good())  
    {  
        cout << "Вы ввели значение " << x << endl;   
        success = true;  
    }  
    else 
        cout << "Значение введено неверно. Повторите ввод" << endl; 
        cin.clear();
        _flushall();
} 
}
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2010, 17:35     Проверка ввода целого числа
Еще ссылки по теме:

Конструирование значения целого числа или числа с плавающей точкой по его дампу - C++
Как сконструировать значения целого числа(char, short int, long int) или числа с плавающей точкой(float,double) по его дампу(bin,oct,hex)??

Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -> 3153) - C++
Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -&gt; 3153) на DevC++. Заранее спасибо

нужен тип целого числа для числа 19!= 121 645 100 408 832 000 - C++
Нужно посчитать сумму цифр целого положительного числа. double summacifr(double chislo) { double summa=0; while(chislo) ...

C++ проверка ввода - C++
Ребят помогить пожалуста разобраться не работает чертова проверка ввода я в коментарии вынес текст ошибки гляньте ... // laba1.cpp:...

Проверка ввода - C++
Как можно проверить вводимые данные, являются ли они числом. Допустим если ввели &quot;08098рррр9&quot; - запросить повторный ввод, а если &quot;43543&quot;...


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

Или воспользуйтесь поиском по форуму:
Chester
1 / 1 / 0
Регистрация: 04.12.2008
Сообщений: 5
05.10.2010, 17:35     Проверка ввода целого числа #9
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
А не подскажете как такое же осуществить в JAVA?
Yandex
Объявления
05.10.2010, 17:35     Проверка ввода целого числа
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru